社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【火炉炼AI】机器学习031-KNN回归器模型的构建

炼丹老顽童 • 8 年前 • 876 次点击  
阅读 2

【火炉炼AI】机器学习031-KNN回归器模型的构建

【火炉炼AI】机器学习031-KNN回归器模型的构建

(本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )

在上一篇文章中我们学习了构建KNN分类器模型,但是KNN不仅可以用于分类问题,还可以用于回归问题,本章我们来学习KNN回归模型的构建和训练。


1. 准备数据集

此处我们使用随机函数构建了序列型数据集,其产生方式是用函数np.sinc()来产生y值。

# 准备数据集,此处用随机的方式生成一些样本数据
amplitute=10
num_points=100
dataset_X=amplitute*np.random.rand(num_points,1)-0.5*amplitute
dataset_y=np.sinc(dataset_X).ravel()
dataset_y+=0.2*(0.5-np.random.rand(dataset_y.size))
print(dataset_X.shape)
print(dataset_y.shape)
复制代码

用plt将该数据集绘制到图表中,可以看到如下结果。

数据集的分布情况


2. KNN回归模型的构建和训练

构建和训练KNN回归器与KNN分类器一样简单,如下代码。

# 构建KNN回归模型
from sklearn.neighbors import KNeighborsRegressor
K=8
KNN_regressor=KNeighborsRegressor(K,weights='distance')
KNN_regressor.fit(dataset_X,dataset_y)
复制代码

虽然此处构建了KNN回归器并对该回归器进行了训练,可是怎么知道训练结果了?

如下我定义了一个绘图函数,可以用散点图的方式来绘制原始的数据集和预测之后的数据集

# 将回归器绘制到图中
def plot_regressor(regressor, X, y):
    # 将数据集绘制到图表中看看分布情况
    plt.scatter(X,y,color='k',marker='o',label='dataset')
    predicted=regressor.predict(X)
    plt.scatter(dataset_X,predicted,color='blue',marker='*',label='predicted')
    plt.xlim(X.min() - 1, X.max() + 1)
    plt.ylim(y.min() - 0.2, y.max() + 0.2)
    plt.legend()
    plt.show()
复制代码

在本数据集上的表现可以从下图中看出:

KNN回归器在训练集上的表现

上面可以看出该KNN回归器在训练集上的表现貌似还不错,那么怎么用该训练完成的KNN回归器来预测新数据集了?如下我们先构建一序列新样本数据,然后将该样本数据绘制到图中,看看其分布是否符合原来的分布特性。

# 下面用本KNN回归器来预测新样本数据,如下
# 构建了10倍的新数据,并且建立第二个轴,用于KNNregressor.predict
new_samples=np.linspace(-0.5*amplitute, 0.5*amplitute, 10*num_points)[:, np.newaxis]
new_predicted=KNN_regressor.predict(new_samples)

# 把原始数据也画上来
plt.scatter(dataset_X,dataset_y,color='k',marker='o',label='dataset')
plt.plot(new_samples,new_predicted,color='r',linestyle='-',
         label='new_samples')
plt.legend()

复制代码

得到的结果图貌似有非常严重的过拟合,如下图:

KNN回归器在新样本数据上的表现

########################小**********结###############################

1,KNN回归器的构建,训练,预测和KNN分类器基本一致。

2,我在使用KNN回归器对训练集进行预测,得到的预测值竟然和训练集中的Y值完全一致,一模一样,我反复检查了好多遍,还是这个结果,刚开始以为是K值太小导致过拟合,但是修改K后仍然有这种情况,这个现象不知道其他人遇到没有,我找了好久都没找到原因所在。

#################################################################


注:本部分代码已经全部上传到(我的github)上,欢迎下载。

参考资料:

1, Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/1cAujSJW0H
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/24857