首页 > 其他分享 >1.12 - 动手搓KNN近邻-分类和回归

1.12 - 动手搓KNN近邻-分类和回归

时间:2024-08-08 15:28:23浏览次数:9  
标签:KNN 1.12 scaler 近邻 np train test import self

1. 通过sklearn调用机器学习api处理问题通用流程

 

# -*- coding: utf-8 -*-
import time
import joblib
import numpy as np
import pandas as pd
from collections import Counter
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score


def general_process_ML():
    # 1. 数据爬取和清洗

    # 2. 数据读取 data/label
    names = ['x1', 'x2', 'x3', 'x4', 'y']
    data = pd.read_csv(r'./../data/iris.data', header=None, names=names)
    X = data.iloc[:, :-1]
    Y = data.iloc[:, -1]
    label_encoder = LabelEncoder()
    Y = label_encoder.fit_transform(Y)
    # print(data.describe())  # 数据描述
    # print('=' * 10)
    # print(data.head())  # 查看前五行
    # print('=' * 10)
    # print(data.isnull().any())  # 数据都不为空

    # 3. 划分训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=1)

    # 4. 特征工程(正则化、标准化、word2Vector)
    scaler = StandardScaler()
    x_train = scaler.fit_transform(x_train)
    x_test = scaler.transform(x_test)

    # 模型初始化
    model = KNeighborsClassifier(n_neighbors=3, weights='uniform', algorithm='kd_tree')

    # 模型训练
    train_start = time.time()
    model.fit(x_train, y_train)
    train_total_time = time.time() - train_start
    print(f"模型训练过程用时: {train_total_time}")

    # 模型评估
    y_train_pred = model.predict(x_train)
    y_test_pred = model.predict(x_test)
    train_score = accuracy_score(y_train, y_train_pred)
    test_score = accuracy_score(y_test, y_test_pred)
    print(f"模型在训练集上的accuracy: {train_score}")
    print(f"模型在测试集上的accuracy: {test_score}")

    # 模型持久化&部署
    scaler_path = r"./../models/knn_scaler.joblib"
    knn_path = r"./../models/knn_model.joblib"
    joblib.dump(scaler, scaler_path)
    joblib.dump(model, knn_path)

    # 加载复用模型权重
    # reload_scaler = joblib.load(scaler_path)
    # reload_knn = joblib.load(knn_path)

 

 

2. 手搓KNN

# -*- coding: utf-8 -*-
import time
import joblib
import numpy as np
import pandas as pd
from collections import Counter
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score


class KNNModel:
    def __init__(self, k=None, classify=False):
        self.k = k
        self.X = None
        self.Y = None
        self.classify = classify

    def fit(self, X, Y):
        self.X = np.array(X)
        self.Y = np.array(Y)

    def get_k_nearest_neighbors(self, X):
        near_neighbors = []
        num = X.shape[0]
        for i in range(num):
            dist = [np.sum((np.array(X[i]) - x) ** 2) for x in self.X]
            dist_list = list(zip(dist, self.Y))
            dist_list.sort(key=lambda pair: pair[0])
            near_neighbors.append(dist_list[:self.k])
        return np.array(np.array(near_neighbors)[:, :, -1])

    def predict(self, X):
        nearest_k_neighbor = self.get_k_nearest_neighbors(X)  # X中每个元素的最近的k个元素的标签
        # 分类取类别最多的,回归取均值
        if self.classify:
            return np.array([Counter(item).most_common(1)[0][0] for item in nearest_k_neighbor])
        else:
            return np.array(nearest_k_neighbor).mean(axis=1)

    def score(self, X, Y):
        y_hat = self.predict(X)
        acc = np.mean(y_hat == Y)
        return acc

 

标签:KNN,1.12,scaler,近邻,np,train,test,import,self
From: https://www.cnblogs.com/zhangzhenw/p/18349035

相关文章

  • RK3588安装rknn-toolkit-lite2
    RK3588安装rknn-toolkit-lite2一、下载rknn-toolkit2包:sudogitclonehttps://gitclone.com/github.com/airockchip/rknn-toolkit2二、安装进入到所在包的位置,然后解压:unziprknn-toolkit2-master.zip进入rknn-toolkit-lite2所在路径:cdrknn-toolkit2-master/rknn-t......
  • YOLOv8n部署到RK3588开发板全流程(pt→onnx→rknn模型转换、板端后处理检测)
    YOLOv8n部署到RK3588开发板全流程文章目录前言一、模型训练二、配置用于pt模型转onnx模型的环境三、pt→onnx模型转换四、配置onnx转rknn模型的虚拟环境五、onnx转rknn模型六、RK3588板端部署前言小白博主,第一次写博客记录自己YOLOv8n部署RK3588开发板的全流程,记......
  • K-近邻和神经网络
    K-近邻(K-NN,K-NearestNeighbors)原理K-近邻(K-NN)是一种非参数分类和回归算法。K-NN的主要思想是根据距离度量(如欧氏距离)找到训练数据集中与待预测样本最近的K个样本,并根据这K个样本的标签来进行预测。对于分类任务,K-NN通过投票的方式选择出现最多的类别作为预测结果;对......
  • 基于KNN-GCN的滚动轴承故障诊断
    数据集:CRWU数据集框架:pytorchtorch-geometric一、数据集​CWRU轴承数据集采集实验台由1.5kW的电机、驱动端轴承、风扇端轴承、扭矩传感器、测功机、加速度传感器和电子控制器组成。待检测的轴承支撑着电动机的转轴,驱动端轴承型号为SKF6205,风扇端轴承型号为SKF6203,本文中使......
  • 深度学习与图像分类day3(KNN算法)
    KNN——最近邻算法(即选择最近的占比最高的类别作为预测类别)KNN算法的计算逻辑1)给定测试对象,计算它与训练集中每个对象的距离。2)圈定距离最近的k个训练对象,作为测试对象的邻居。3)根据这k个近邻对象所属的类别,找到占比最高的那个类别作为测试对象的预测类别。在KNN算法中,有......
  • 挑战房市预测领头羊:KNN vs. 决策树 vs. 线性回归
    挑战房市预测领头羊(KNN,决策树,线性回归)1.介绍1.1K最近邻(KNN):与邻居的友谊1.1.1KNN的基础1.1.2KNN的运作机制1.1.3KNN的优缺点1.2决策树:解码房价的逻辑树1.2.1决策树的基础1.2.2决策树的构建1.2.3决策树的优缺点1.3线性回归:简单而高效的预测工具1.3.1线性回归......
  • RK3588 RKNN环境部署
    前言,官方提供两种部署环境,其中按照官方说法为了完全运行RKNN环境采用Docker的部署环境方案。1.安装Docker环境 (1)检查卸载老版本Docker sudoapt-getremovedockerdocker-enginedocker.iocontainerdrunc (2)安装Docker依赖 sudoapt-getinstallca-certifica......
  • 昇思25天学习打卡营第20天|K近邻算法实现红酒聚类
    K近邻算法实现红酒聚类实验目的K近邻算法原理介绍分类问题回归问题距离的定义实验环境数据处理数据准备数据读取与处理模型构建--计算距离模型预测实验小结本实验主要介绍使用MindSpore在部分wine数据集上进行KNN实验。实验目的了解KNN的基本概念;了解如何使用Mind......
  • 电影《抓娃娃》迅雷BT下载[MP4/1.12GB/2.35GB]高清画质[百度云中字已更新]
    电影《抓娃娃》以其独特的叙事手法和深刻的主题,引发了观众对教育体系、家庭教育以及人性成长的广泛讨论。这部影片通过荒诞的情节和密集的笑料,不仅让观众在欢笑中反思,更在轻松的氛围中感受到教育的沉重与复杂。本文将从故事情节、角色塑造、主题表达以及观众反响等角度,对电影......
  • 手写数字识别——KNN模型实现
    MNIST手写数字识别        MNIST手写数字数据库有一个包含60,000个示例的训练集和一个包含10,000个示例的测试集。每个图像高28像素,宽28像素,共784个像素。每个像素取值范围[0,255],取值越大意味着该像素颜色越深    下载:http://yann.lecun.com/e......