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连接oracle数据库实例
Oct 17 Python
Python抽象类的新写法
Jun 18 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
Dec 10 Python
Python实现网站表单提交和模板
Jan 15 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
django echarts饼图数据动态加载的实例
Aug 12 Python
详解python statistics模块及函数用法
Oct 27 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
Python正则表达式如何匹配中文
May 27 Python
python urllib和urllib3知识点总结
Feb 08 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多文件上传下载示例分享
2014/02/20 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
js操作二级联动实现代码
2010/07/27 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
浅谈Angular 观察者模式理解
2018/11/01 Javascript
js实现随机8位验证码
2020/07/24 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
个人自荐信
2013/12/05 职场文书
大学生活自我评价
2014/04/09 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
爱国口号
2014/06/19 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang
pandas数值排序的实现实例
2021/07/25 Python
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏