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文件中文编码问题
Nov 22 Python
利用Python破解验证码实例详解
Dec 08 Python
python线程中同步锁详解
Apr 27 Python
Python2包含中文报错的解决方法
Jul 09 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 Python
django自带的权限管理Permission用法说明
May 13 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
MATLAB数学建模之画图汇总
Jul 16 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
python爬虫调度器用法及实例代码
Nov 30 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 Python
深入理解Pytorch微调torchvision模型
Nov 11 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
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
php cli配置文件问题分析
2015/10/15 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
详解在Python程序中使用Cookie的教程
2015/04/30 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python入门必须知道的11个知识点
2018/03/21 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
详解python metaclass(元类)
2020/08/13 Python
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
法院实习人员自我鉴定
2013/09/26 职场文书
初中校园广播稿
2014/02/02 职场文书
决心书范文
2014/03/11 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript