概述
本文基于鸢尾花数据集
本文基于鸢尾花 数据集实现
数据集:数据集网盘下载
提取码:p2v9
用前3个特征实现第4个特征的回归预测
导入库
import numpy as np
import pandas as pd
读取数据集
data = pd.read_csv(r"dataset/iris.arff.csv")
#删除不需要的class列,因为现在进行回归预测,类别信息就没用了。
data.drop("class",axis=1,inplace=True)
#删除重复的记录
data.drop_duplicates(inplace=True)
KNN算法实现
class KNN:
"""使用python实现K近邻算法。(回归算法)
get_ipython算法用于回归预测,根据前三个前三个特征属性,寻找最近的k个邻居,
然后在根据k个邻居的第4个特征值,去预测当前样本的第4个特征值。
"""
def __init__(self,k):
"""初始化方法
Parameters
----------
k: int
邻居的个数
"""
self.k = k
def 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
------------------
result:数组类型。
预测结果值。
"""
# 转换成数组类型
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.asarray(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)
print(np.sum((result-test_y)**2))
display(test_y.values)
可视化
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False
plt.figure(figsize=(10,8))
#绘制预测值
plt.plot(result,"ro-",label="预测值")
#绘制真实值
plt.plot(test_y.values,"go--",label="实值")
plt.title("KNN连续值预测")
plt.xlabel("节点序号")
plt.ylabel("花瓣宽度")
plt.legend()
plt.show()
最后
以上就是聪明雪糕为你收集整理的【python机器学习】KNN算法实现回归(基于鸢尾花数据集)的全部内容,希望文章能够帮你解决【python机器学习】KNN算法实现回归(基于鸢尾花数据集)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复