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中__call__内置函数用法实例
Jun 04 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
Python的装饰器用法学习笔记
Jun 24 Python
Python元字符的用法实例解析
Jan 17 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
Python通过4种方式实现进程数据通信
Mar 12 Python
Django 删除upload_to文件的步骤
Mar 30 Python
Python 如何实现访问者模式
Jul 28 Python
pytorch简介
Nov 11 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 Python
Python绘制散乱的点构成的图的方法
Apr 21 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简单系统查询模块代码打包下载
2008/06/07 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
python生成IP段的方法
2015/07/07 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
Python同步遍历多个列表的示例
2019/02/19 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
python dataframe NaN处理方式
2019/12/26 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
django跳转页面传参的实现
2020/09/17 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
一组SQL面试题
2016/02/15 面试题
致200米运动员广播稿
2014/02/06 职场文书
迟到检讨书300字
2014/02/14 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL