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

KNN回归算法

KNN回归算法就是给定数据集与结果,预测后面新出的数据集的结果。与前面KNN最邻近算法比较类似,最临近算法是求出预测数据集与训练数据集的每个点之间的距离,取前k个数据集的结果集,把结果集中占比大的结果作为预测结果。但是KNN回归算法,就是将前k个数据集的结果进行求平均作为预测的数据集。

图文演示

去除Id列和对应的Species列,将其他的4列特征集的前三列作为数据集,后一列作为结果集
在这里插入图片描述

案例演示

写KNN回归算法前的数据准备

# 导入jar包
import numpy as np
import pandas as pd
# 获取数据
data = pd.read_csv("iris.csv")
# 随机去前10条数据
data.sample(10)
# 删除两列
data.drop(["Id","Species"],axis=1,inplace=True)
data
# 去重,排除线性相关
data.drop_duplicates(inplace=True)
len(data)

KNN回归算法编写

class KNN:
    """KNN 回归算法
    使用鸢尾花的四个特征进行训练    花瓣长度、宽度   花萼长度、宽度
    算法的目标是  根据鸢尾花的三个特征,预测最后一个特征的  度量 (预测值)
    """
    def __init__(self,k):
        """初始化方法
        
        k:int
        设置k的值,找出相邻数据的个数
        """
        self.k = k
        
        
    def fit(self,X,y):
        """根据参数传递过来的X,对样本数据进行预测
        -------
        返回一个数组类型,预测结果
        """
        self.X = np.asarray(X)
        self.y = np.asarray(y)
        result = []
    
    def predict(self,V):
        V = np.asarray(V)
        result = []
        
        for v in V:
            # 计算距离 测试几种某一个数据到训练集中没一个点的距离
            # 数学模型就是 计算空间中某一点(含 x,y,z坐标) 到空间中一个含有多个点的集合中()
            dis = np.sqrt(np.sum((v - self.X)**2,axis=1))
            index = dis.argsort()
            index = index[:self.k]
            # 计算训练的平均值作为预测结果
            #disavg = np.mean(self.y[index])
            # 将disavg的最大下标的数据添加到result数组中
            #result.append(disavg.argmax())
            result.append(np.mean(self.y[index]))
        return np.asarray(result)
    
    def predict2(self,V):
        """ 加权重 """
        V = np.asarray(V)
        result = []
        
        for v in V:
            # 计算距离 测试几种某一个数据到训练集中没一个点的距离
            # 数学模型就是 计算空间中某一点(含 x,y,z坐标) 到空间中一个含有多个点的集合中()
            dis = np.sqrt(np.sum((v - self.X)**2,axis=1))
            index = dis.argsort()
            index = index[:self.k]
            
            # 求k个距离的倒数和
            he = np.sum(1/(dis[index]+0.0001))
            
            # 计算权重(倒数/倒数和)
            weight = (1/(dis[index]+0.0001)) / he
            
            # 计算训练的平均值作为预测结果
            #disavg = np.mean(self.y[index])
            # 将disavg的最大下标的数据添加到result数组中
            #result.append(disavg.argmax())
            # 将前面K的计算结果(计算结果要与该店所占的权重比相乘)求均值后放入result数组中
            result.append(np.mean(self.y[index] * weight))
        return np.asarray(result)

准备KNN回归算法的训练数据集与预测数据集

X = data.sample(len(data),random_state=0)
len(X)
train_X = X.iloc[:120, :-1]
train_y = X.iloc[:120, -1]
test_X = X.iloc[120:, :-1]
test_y = X.iloc[120:, -1]

# 创建KNN对象
knn = KNN(k = 3)
knn.fit(train_X,train_y)
result = knn.predict(test_X)
display(result)
display(test_y.values)
np.mean((result-test_y)**2)

进行折线图展示预测结果

import matplotlib as mpl
import matplotlib.pyplot as plt
# matplotlib 不支持中文,需要配置一下,设置一个中文字体
mpl.rcParams["font.family"] = "SimHei"
# 能够显示 中文 ,正常显示 "-"
mpl.rcParams["axes.unicode_minus"] = False
plt.figure(figsize=(10,10))
plt.plot(result,"ro-",label="预测值")
plt.plot(test_y.values,"bo--",label="真实值")
plt.title("KNN回归算法预测展示")
plt.xlabel("序号")
plt.ylabel("度量值")
plt.legend()
plt.show()

在这里插入图片描述

  • 12
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
knn(k-nearest neighbors)回归算法是一种基于实例的学习方法,用于解决回归问题。回归问题是指预测一个连续值变量的问题。knn回归算法根据数据集中与待预测变量最相似的k个近邻样本的输出值,通过加权平均来预测待预测变量的值。 数据集在knn回归算法中扮演着很重要的角色。数据集由一系列样本组成,每个样本都包含多个特征和一个对应的待预测变量值。特征是用来描述样本的属性或特性,待预测变量值是我们希望通过knn回归算法来预测的连续值。 在使用knn回归算法时,首先需要对数据集进行预处理。这包括对特征进行标准化或归一化,以确保它们在相同的尺度上,并且按照某种距离度量方法计算样本之间的相似度。常用的距离度量方法包括欧氏距离和曼哈顿距离。 一旦数据集被预处理,knn回归算法可以开始进行预测。对于待预测样本,算法首先通过计算该样本与数据集中所有样本的距离,找到与之最相似的k个近邻。然后,根据这k个近邻的待预测变量值,通过加权平均的方式来计算出该样本的预测值。 knn回归算法的关键参数是k值的选择。k值的选择会影响算法的性能。选择较小的k值可能会导致算法对噪声敏感,而选择较大的k值可能会平均化邻居之间的差异,降低了模型的灵敏度。为了找到最佳的k值,可以使用交叉验证或网格搜索等技术来评估模型在不同k值下的性能。 总的来说,knn回归算法需要一个数据集来进行预测。数据集包含了一系列样本,每个样本都有特征和对应的待预测变量值。通过计算待预测样本与数据集中的样本之间的距离,找到与之最相似的k个近邻,通过加权平均的方式进行预测。选择合适的k值可以提高算法的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值