Python机器学习之scikit-learn库中KNN算法的封装与使用方法
作者:我是马克思小清新 发布时间:2021-04-05 15:32:40
标签:Python,机器学习,scikit-learn库,KNN算法
本文实例讲述了Python机器学习之scikit-learn库中KNN算法的封装与使用方法。分享给大家供大家参考,具体如下:
1、工具准备,python环境,pycharm
2、在机器学习中,KNN是不需要训练过程的算法,也就是说,输入样例可以直接调用predict预测结果,训练数据集就是模型。当然这里必须将训练数据和训练标签进行拟合才能形成模型。
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程序设计有所帮助。
来源:https://blog.csdn.net/qq_33531400/article/details/83036380


猜你喜欢
- 前言很多人会使用postman工具,或者熟悉python,但不一定会使用python来编写测试用例脚本,postman里面可以完整的将pyt
- 一、之前解决方案大概是这样:短时间内同一位好友发送了多条消息,当他随便撤回一条消息时,我们不能确定他到底撤回的到底是哪一条消息。只能猜他可能
- 文件处理流程1.打开文件,得到文件句柄并赋值给一个变量2.通过句柄对文件进行操作3.关闭文件 r模式,默认模式,文件不存在则报错w
- 在处理图像的时候经常是读取图片以后把图片转换为灰度图。作为一个刚入坑的小白,我在这篇博客记录了四种处理的方法。首先导入包:import nu
- 本文实例讲述了Python基于列表list实现的CRUD操作功能。分享给大家供大家参考,具体如下:本篇文章看之前你的先了解python 基础
- 如下所示:# _*_ coding:utf-8 _*_#------------------------------------------
- 如果你细心跟踪一下SQL Server数据库服务器的登录过程,你会发现口令计算其实是非常脆弱的,SQL Server数据
- 常规方案使用FileReader以utf-8格式读取文件,根据文件内容是否包含乱码字符�,来判断文件是否为utf-8。如果存在�,即文件编码
- 对于英文不行我来说使用英文版PyCharm实在是太难受了,网上好多汉化补丁都是网友提供了,下面为大家介绍一种PyCharm官方中文语言包汉化
- infer 这个关键字,整理记录一下,避免后面忘记了。有点难以理解呢。inferinfer 是在 typescript 2.8中新增的关键字
- 1 re.match 说明re.match() 从开始位置开始往后查找,返回第一个符合规则的对象,如果开始位置不符合匹配队形则返
- 无法远程登入MySQL数据库的几种解决办法方法一:尝试用MySQL Adminstrator GUI Tool登入MySQL Server,
- SQLServer数据库从高版本降级到低版本实例详解由于目前还广泛使用着SQLServer2000,很多公司又想使用新的SQLServer,
- 关联模型(多对多)多对多关系(抽象)例:一篇文章可能有多个关键词,一个关键词可能被多个文章使用。 关键词表:字段id主键字段keyword关
- 几个方式(本文不作介绍),要将Session保存到SQL Server中,需要有以下几个步骤:1.首先要创建用于保存Session数据的数据
- python使用super()出现错误解决办法当我们在python的子类中调用父类的方法时,会用到super(),不过我遇到了一个问题,顺便
- 在本篇文章当中主要给大家介绍一个我们在使用类的时候经常使用但是却很少在意的黑科技——描述器,在本篇文
- 一、Python的矩阵传播机制(Broadcasting)我们知道在深度学习中经常要操作各种矩阵(matrix) 。回想一下,我们
- 如下所示:coupon = models.ForeignKey("Coupon", on_delete=models.C
- 目录一:twisted中的adbapi1.1 两个主要方法1.2 使用实例二:结合scrapy中的pipelines一:twisted中的a