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实现从url中提取域名的几种方法
Sep 26 Python
python根据出生日期获得年龄的方法
Mar 31 Python
简单介绍Python中的JSON使用
Apr 28 Python
Python设置默认编码为utf8的方法
Jul 01 Python
Python中多线程的创建及基本调用方法
Jul 08 Python
利用python获取Ping结果示例代码
Jul 06 Python
Python3数据库操作包pymysql的操作方法
Jul 16 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
Python: 传递列表副本方式
Dec 19 Python
python matplotlib包图像配色方案分享
Mar 14 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 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 巧用数组降低程序的时间复杂度
2010/01/01 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
文秘专业大学生求职信
2013/11/10 职场文书
程序员岗位职责
2013/11/11 职场文书
一体化教学实施方案
2014/05/10 职场文书
python实现批量移动文件
2021/04/05 Python
python实现MD5进行文件去重的示例代码
2021/07/09 Python