Python机器学习之scikit-learn库中KNN算法的封装与使用方法

作者:我是马克思小清新 时间:2021-04-05 15:32:40 

本文实例讲述了Python机器学习之scikit-learn库中KNN算法的封装与使用方法。分享给大家供大家参考,具体如下:

1、工具准备,python环境,pycharm

2、在机器学习中,KNN是不需要训练过程的算法,也就是说,输入样例可以直接调用predict预测结果,训练数据集就是模型。当然这里必须将训练数据和训练标签进行拟合才能形成模型。

Python机器学习之scikit-learn库中KNN算法的封装与使用方法

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程序设计有所帮助。

来源:https://blog.csdn.net/qq_33531400/article/details/83036380

标签:Python,机器学习,scikit-learn库,KNN算法
0
投稿

猜你喜欢

  • mysql出现10061错误解决办法

    2010-07-04 13:36:00
  • 详解常用查找数据结构及算法(Python实现)

    2023-02-27 02:03:21
  • 用python实现k近邻算法的示例代码

    2022-08-28 16:08:58
  • vue中如何引入html静态页面

    2023-07-02 17:03:34
  • Python如何用NumPy读取和保存点云数据

    2022-05-26 17:41:19
  • 面试官问订单ID是如何生成的?难道不是MySQL自增主键

    2024-01-24 00:36:24
  • vue-element-admin 登陆及目录权限控制的实现

    2024-04-28 09:26:29
  • Python实现绘制圣诞树和烟花的示例代码

    2022-03-22 16:22:20
  • Python requests.post()方法中data和json参数的使用方法

    2022-10-10 04:25:45
  • 苹果Macbook Pro13 M1芯片安装Pillow的方法步骤

    2021-01-11 18:23:46
  • Thinkphp5.0框架视图view的循环标签用法示例

    2024-06-05 09:22:48
  • 详解MySQL中存储函数创建与触发器设置

    2024-01-17 22:58:31
  • 详解Idea 2020 找不到或无法安装官方汉化包解决方案

    2022-03-21 23:01:29
  • Python实现查询某个目录下修改时间最新的文件示例

    2021-07-08 00:31:18
  • 优雅的使用javascript递归画一棵结构树示例代码

    2024-04-30 08:52:22
  • pycharm开发一个简单界面和通用mvc模板(操作方法图解)

    2022-10-09 06:28:39
  • Python进阶篇之多线程爬取网页

    2023-01-15 13:22:39
  • python视频转化字节问题的完整实现

    2023-05-21 16:55:28
  • 浅谈ThinkPHP的URL重写

    2024-05-13 09:24:20
  • ASP编程入门进阶教程

    2008-06-29 18:00:00
  • asp之家 网络编程 m.aspxhome.com