构建一个KNN回归器
代码如下:
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from sklearn import neighbors
''' KNN 回归器'''
# 生成样本数据
amplitude = 10
num_points = 100
x = amplitude * np.random.rand(num_points, 1)-0.5*amplitude
# 计算目标并添加噪声 sinc 辛格函数 称为采样函数 抽样函数 基本正弦函数
# sinc(x)=sin(x)/x(x!=0)=1(x=0)
y = np.sinc(x).ravel()
y += 0.2*(0.5-np.random.rand(y.size))
# 画出图形
plt.figure()
plt.scatter(x,y,s=40,c='k',facecolor='none')
plt.title('Input data')
# 定义更加密集的网格 输入数据的10倍数定义网格
x_values=np.linspace(-0.5*amplitude,0.5*amplitude,10*num_points)[:,np.newaxis]
# 定义最近邻网格
num_neighbors=8
# 定义并训练回归器
knn_regressor=neighbors.KNeighborsRegressor(num_neighbors,weights='distance')
y_values=knn_regressor.fit(x,y).predict(x_values)
plt.figure()
plt.scatter(x,y,s=40,c='k',facecolors='none',label='input_data')
plt.plot(x_values,y_values,c='k',linestyle='--',label='Predicted values')
plt.xlim(x.min()-1,x.max()+1)
plt.ylim(y.min()-0.2,y.max()+0.2)
# 用于显示图例
plt.legend()
plt.title('K nearest Neignbors Regressor')
plt.show()
输入数据分布图如下所示:
KNN回归器 预测值如下所示: