import numpy as np
import pandas as pd

对数据集操作

data=pd.read_csv(r"F:\数据集\Iris数据集\iris.csv")
#删除Unnamed: 0与Species对应的列(特征),因为现在进行回归预测,类别信息就没有用处了
data.drop(["Unnamed: 0","Species"],axis=1,inplace=True)
#删除重复的记录
data.drop_duplicates(inplace=True)

编写KNN类

class KNN:"""使用python实现KNN算法。(回归预测)该算法用于回归预测,根据前三个特征属性,寻找最近的K个邻居,然后再根据K个邻居的第四个特征属性,去预测当前样本的 第四个特征值"""def __init__(self,k):"""初始化方法Parameters:____________k:邻居的个数"""self.k=kdef fit(self,X,y):"""训练方法Parameters:__________X:类数组类型(特征矩阵),形状为[样本数量,特征数量]待训练的样本特征(属性)y:类数组类型(目标标签),形状为[样本数量]每个样本的目标值(标签)"""#注意:将X  y 转化为ndarray数组形式,方便统一进行操作self.X=np.asarray(X)self.y=np.asarray(y)def predict(self,X):"""根据参数传递的X,对样本呢进行预测Parameters:___________X:类数组类型,形状为[样本数量,特征数量]待测试的样本特征(属性)return:数组类型预测的结果值"""#将X转化为数组类型X=np.asarray(X)#保存预测的结果值result=[]for x in X:#计算距离。(计算与训练集中每个X的距离)dis=np.sqrt(np.sum((x-self.X)**2,axis=1))#返回数组排序后每个元素在原数组(排序之前的数组)中的索引index=dis.argsort()#进行切片,取前k个距离最近的索引(在原数组中的索引)index=index[:self.k]#计算均值,然后加入到结果列表当中result.append(np.mean(self.y[index]))return np.array(result) def predict2(self,X):"""根据参数传递的X,对样本呢进行预测(考虑权重)权重的计算方式:使用每个节点(邻居)距离的倒数/所有节点距离倒数之和Parameters:___________X:类数组类型,形状为[样本数量,特征数量]待测试的样本特征(属性)return:数组类型预测的结果值"""#将X转化为数组类型X=np.asarray(X)#保存预测的结果值result=[]for x in X:#计算距离。(计算与训练集中每个X的距离)dis=np.sqrt(np.sum((x-self.X)**2,axis=1))#返回数组排序后每个元素在原数组(排序之前的数组)中的索引index=dis.argsort()#进行切片,取前k个距离最近的索引(在原数组中的索引)index=index[:self.k]#计算所有邻居节点距离的倒数之和.注意:最后加上一个很小的值就是为了笔迷那除数(距离)为零的情况s=np.sum(1/(dis[index]+0.001))#使用每个节点距离的倒数,除以倒数之和,得到权重weight=(1/(dis[index]+0.001))/s#使用邻居节点的标签值,诚意对应的权重,然后相加,得到最终的预测结果 result.append(np.sum(self.y[index]*weight))return np.array(result)

训练与测试

t=data.sample(len(data),random_state=0)
train_X=t.iloc[:120,:-1]
train_y=t.iloc[:120,-1]
test_X=t.iloc[120:,:-1]
test_y=t.iloc[120:,-1]
knn=KNN(k=3)
knn.fit(train_X,train_y)
result=knn.predict(test_X)
display(result)
np.mean(np.sum(result-test_y)**2)
display(test_y.values)
array([0.2       , 2.06666667, 0.2       , 1.93333333, 1.26666667,1.2       , 1.23333333, 2.        , 1.13333333, 1.93333333,2.03333333, 1.83333333, 1.83333333, 0.2       , 1.16666667,2.26666667, 1.63333333, 0.3       , 1.46666667, 1.26666667,1.66666667, 1.33333333, 0.26666667, 0.23333333, 0.2       ,2.03333333, 1.26666667, 2.2       , 0.23333333])array([0.2, 1.6, 0.2, 2.3, 1.3, 1.2, 1.3, 1.8, 1. , 2.3, 2.3, 1.5, 1.7,0.2, 1. , 2.1, 2.3, 0.2, 1.3, 1.3, 1.8, 1.3, 0.2, 0.4, 0.1, 1.8,1. , 2.2, 0.2])

可视化

import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.family"]="SimHei"
mpl.rcParams["axes.unicode_minus"]=False
plt.figure(figsize=(8,8))
#绘制预测值
plt.plot(result,"ro-",label="预测值")
#绘制真实值
plt.plot(test_y.values,"go--",label="真实值")
plt.title("KNN 连续值预测展示")
plt.xlabel("节点序号")
plt.ylabel("花瓣宽度")
plt.legend()
plt.show()

KNN回归python实现相关推荐

  1. knn的python代码_《机器学习实战》之一:knn(python代码)

    数据 标称型和数值型 算法 归一化处理:防止数值较大的特征对距离产生较大影响 计算欧式距离:测试样本与训练集 排序:选取前k个距离,统计频数(出现次数)最多的类别 def classify0(inX, ...

  2. KNN回归在无线定位上的应用

    KNN回归在无线定位上的应用 Python KNN 无线定位 回归 1.KNN无线指纹定位代码 #coding:utf-8 import random import math# 提取训练集与测试集数据 ...

  3. 具体knn算法概念参考knn代码python实现

    具体knn算法概念参考knn代码python实现 上面是参考<机器学习实战>的代码,和knn的思想 # _*_ encoding=utf8 _*_ import numpy as np i ...

  4. 入门机器学习(六)--课后作业解析-logistics回归(python实现)

    相关资料: 逻辑回归Python实现源码与数据集下载 吴恩达机器学习课件与课后习题下载 编程作业2 logistic_regression(逻辑回归) 推荐运行环境:python 3.6 建立一个逻辑 ...

  5. KNN分类python实现

    import numpy as np import pandas as pd KNN算法过程 从训练集中选择离预测样本最近的K个样本. 根据这K个样本计算这个样本的值(属于哪个类别或具体数值) 对数据 ...

  6. R语言使用caret包的knnreg函数拟合KNN回归模型:使用predict函数和训练好的模型进行预测推理、使用plot函数可视化线图对比预测值和实际值曲线

    R语言使用caret包的knnreg函数拟合KNN回归模型:使用predict函数和训练好的模型进行预测推理.使用plot函数可视化线图对比预测值和实际值曲线 目录

  7. Task09基于模拟数据集的KNN回归、基于马绞痛数据集的KNN数据预处理+KNN分类pipeline

    Task09 基于模拟数据集的KNN回归.基于马绞痛数据集的KNN数据预处理+KNN分类pipeline 一.学习内容概括 学习资料: 1.阿里云天池:https://tianchi.aliyun.c ...

  8. KNN回归算法【配有案例演示】

    KNN回归算法 KNN回归算法就是给定数据集与结果,预测后面新出的数据集的结果.与前面KNN最邻近算法比较类似,最临近算法是求出预测数据集与训练数据集的每个点之间的距离,取前k个数据集的结果集,把结果 ...

  9. knn算法python代码_KNN算法原理(python代码实现)

    kNN(k-nearest neighbor algorithm)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性 ...

最新文章

  1. eclipse设置代码自动保存步骤
  2. 【Python基础】字符串专题总结
  3. 主题简介 ASP .NET
  4. hdu 2821 Pusher (dfs)
  5. Android四级缓存,RecyclerView的四级缓存-初探
  6. python db api_dbapi · PyPI
  7. [导入]8.3赛车频道活动
  8. 【BZOJ22233524】PATULJCI [主席树]
  9. 记一次小程序自定义导航栏及加载动画的解决方案
  10. 321电商学院 与华中师大联手 - 2014-10-22
  11. java 泛型的问题_java 泛型问题?
  12. 矩阵运算_Sophus库的使用
  13. python--弦图
  14. 黑苹果长期维护机型整理清单
  15. 计算机考研408的优势和劣势,为什么说计算机考研408是大趋势
  16. WinZip 18.0下载地址及注册码
  17. 图论基础——启发式搜索
  18. 推荐几个图标搜索网站
  19. QT的triggered意思
  20. 7个实用方法,让你稳步提升记忆!

热门文章

  1. CentOS下搭建wordpress全流程
  2. IOCP扩展方法AcceptEx, DisconnectEx, GetAcceptExSockaddr用法示例
  3. jquery-添加/删除cookie
  4. NHibernate.3.0.Cookbook第三章第8节的翻译
  5. oracle存储过程中update不成功的一个原因
  6. ZAO 换脸不安全?用 python 轻松实现 AI
  7. vs2017安装完成,但有错误。
  8. 删除iptables nat 规则
  9. 17-8-26-WebApp总结
  10. PL/SQL Developer-官网下载地址