K-最近傍アルゴリズムの機械学習(KNN)

アウトライン

KNN分類は異なる特徴値の間の距離を測定することによって行われます。隣人最寄りのいわゆるK最近傍、kは各サンプルが表すように、その最も近い隣人kを使用することができるということであるという意味です。KNNアルゴリズムは、増加データの寸法が予測性能を向上させることができ、百パーセントを予測する方法はありません。

K-最近傍アルゴリズム原理

利点:高い精度、外れ値の影響を受けないが、入力データはないことが想定される
高い時間複雑性O(n)が、空間的に高い複雑:欠点
適用範囲データ:数値と名目タイプ

KNNのシンプルなアプリケーション

from sklearn.neighbors import KNeighborsClassifier #knn fenleiqi

x_train=[[182,78,45],[162,48,40],[187,50,41],
         [178,65,44],[158,50,38],[185,67,44]]
y_train=['男','女','男','男','女','男']

knn=KNeighborsClassifier(n_neighbors=3)#KNN 对象
knn.fit(x_train,y_train)#训练数据,建立自适应模型

Test_data=[[182,75,44],[159,49,40]]
knn.predict(Test_data) #预测分类

KNN分類(sklearn)と回帰

データポイントに当てはめ回帰直線は、ベストフィットは、最小残差であります

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier #knn fenleiqi
from sklearn.neighbors import KNeighborsRegressor
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import datasets

iris = datasets.load_iris()
x=iris.data[:,:2]
y=iris.target
print(x)
print(y)
# K=15,计算周围邻近的15个点
K=15
# 图片x,y轴的歩长
h=0.02
cmap_light=ListedColormap(["#FF0FFF","#0FFFFF","#00F0FF"])
cmap_bold=ListedColormap(["#FF0000","#00FF00","#0000FF"])
myknn=KNeighborsClassifier(n_neighbors=K)
myknn.fit(x,y)

#确定范围
xmin,xmax=x[:,0].min()-1,x[:,0].max()-1
ymin,ymax=x[:,1].min()-1,x[:,1].max()-1
#网格化
xx,yy=np.meshgrid(np.arange(xmin,xmax,h),
                  np.arange(ymin,ymax,h))
#预测
z=myknn.predict(np.c_[xx.ravel(),yy.ravel()])
z=z.reshape(xx.shape)

#背景颜色
plt.pcolormesh(xx,yy,z,cmap=cmap_light)

#画散点图
plt.scatter(x[:,0],x[:,1],c=y,cmap=cmap_bold)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("fenlei")
# plt.show()
plt.savefig("show.png")


# knn 回归
np.random.seed(0)
x = np.sort(5*np.random.rand(40,1),axis=0)
y=np.sin(x).ravel()

y[::5]+=1*(0.5-np.random.rand(8))

T=np.linspace(0,5,100)[:,np.newaxis]
# print(T)

knn=KNeighborsRegressor(n_neighbors=5)
knn.fit(x,y)
newy=knn.predict(T)

plt.scatter(x,y,c="k",label="data")
plt.plot(T,newy,c="b",label="predict")
plt.legend()
plt.savefig("show.png")

保存モデル

from sklearn.externals import joblib
joblib.dump(knn,r"path/1.m") #保存模型
mynewknn=joblib.load(r"path/1.m") #加载模型

概要

  結果のためのKNN不均一なサンプルデータが悪い、改善する必要があります。データのK最近傍は、近い試験サンプル、より大きな重み重みとして、Quanshi重量を付与する方法を改善しました。KNNは時間がかかり、時間計算量はO(N)であり、データがツリーの形で大量のデータを提示することができる場合、一般にサンプルデータセットの数が少ないにも適用可能であり、速度を増加させるために一般的に使用されるkdツリーボールツリー。

おすすめ

転載: www.cnblogs.com/focusTech/p/12299749.html