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


Posted in Python onDecember 14, 2018

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
Python使用函数默认值实现函数静态变量的方法
Aug 18 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
Python内置函数 next的具体使用方法
Nov 24 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
python实现电子产品商店
Feb 26 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
python循环定时中断执行某一段程序的实例
Jun 29 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
python 实现线程之间的通信示例
Feb 14 Python
Python面向对象之类的内置attr属性示例
Dec 14 #Python
python模糊图片过滤的方法
Dec 14 #Python
python 随机打乱 图片和对应的标签方法
Dec 14 #Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 #Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 #Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 #Python
用python爬取租房网站信息的代码
Dec 14 #Python
You might like
php 获取mysql数据库信息代码
2009/03/12 PHP
php access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
python遍历数组的方法小结
2015/04/30 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
采用怎样的方法保证数据的完整性
2013/12/02 面试题
师范毕业生求职自荐信
2013/09/25 职场文书
应届生会计求职信
2013/11/11 职场文书
广告语设计及教案
2014/03/21 职场文书
给校长的建议书100字
2014/05/16 职场文书
社会实践活动总结
2015/02/05 职场文书
2019广播稿怎么写
2019/04/17 职场文书