Python机器学习之scikit-learn库中KNN算法的封装与使用方法
程序员文章站
2023-11-03 09:01:34
本文实例讲述了python机器学习之scikit-learn库中knn算法的封装与使用方法。分享给大家供大家参考,具体如下:
1、工具准备,python环境,pychar...
本文实例讲述了python机器学习之scikit-learn库中knn算法的封装与使用方法。分享给大家供大家参考,具体如下:
1、工具准备,python环境,pycharm
2、在机器学习中,knn是不需要训练过程的算法,也就是说,输入样例可以直接调用predict预测结果,训练数据集就是模型。当然这里必须将训练数据和训练标签进行拟合才能形成模型。
3、在pycharm中创建新的项目工程,并在项目下新建knn.py文件。
import numpy as np from math import sqrt from collections import counter class knnclassifier: def __init__(self,k): """初始化knn分类器""" assert k >= 1 """断言判断k的值是否合法""" self.k = k self._x_train = none self._y_train = none def fit(self,x_train,y_train): """根据训练数据集x_train和y_train训练knn分类器,形成模型""" assert x_train.shape[0] == y_train.shape[0] """数据和标签的大小必须一样 assert self.k <= x_train.shape[0] """k的值不能超过数据的大小""" self._x_train = x_train self._y_train = y_train return self def predict(self,x_predict): """必须将训练数据集和标签拟合为模型才能进行预测的过程""" assert self._x_train is not none and self._y_train is not none """训练数据和标签不可以是空的""" assert x_predict.shape[1]== self._x_train.shape[1] """待预测数据和训练数据的列(特征个数)必须相同""" y_predict = [self._predict(x) for x in x_predict] return np.array(y_predict) def _predict(self,x): """给定单个待测数据x,返回x的预测数据结果""" assert x.shape[0] == self._x_train.shape[1] """x表示一行数据,即一个数组,那么它的特征数据个数,必须和训练数据相同 distances = [sqrt(np.sum((x_train - x)**2))for x_train in self._x_train] nearest = np.argsort(distances) topk_y = [self._y_train[i] for i in nearest[:self.k]] votes = counter(topk_y) return votes.most_common(1)[0][0]
4、新建test.py文件,引入knnclassifier对象。
from knn.py import knnclassifier raw_data_x = [[3.393,2.331], [3.110,1.781], [1.343,3.368], [3.582,4.679], [2.280,2.866], [7.423,4.696], [5.745,3.533], [9.172,2.511], [7.792,3.424], [7.939,0.791]] raw_data_y = [0,0,0,0,0,1,1,1,1,1] x_train = np.array(raw_data_x) y_train = np.array(raw_data_y) x = np.array([9.880,3.555]) # 要将x这个矩阵转换成2维的矩阵,一行两列的矩阵 x_predict = x.reshape(1,-1) """1,创建一个对象,设置k的值为6""" knn_clf = knnclassifier(6) """2,将训练数据和训练标签融合""" knn_clf.fit(x_train,y_train) """3,经过2才能跳到这里,传入待预测的数据""" y_predict = knn_clf.predict(x_predict) print(y_predict)
更多关于python相关内容感兴趣的读者可查看本站专题:《python数学运算技巧总结》、《python数据结构与算法教程》、《python函数使用技巧总结》、《python字符串操作技巧汇总》及《python入门与进阶经典教程》
希望本文所述对大家python程序设计有所帮助。