//2019.08.01下午
機器學習算法1——k近鄰算法
1、k近鄰算法是學習機器學習算法最為經典和簡單的算法,它是機器學習算法入門最好的算法之一,可以非常好並且快速地理解機器學習的算法的框架與應用。
2、kNN機器學習算法具有以下的特點:
(1)思想極度簡單
(2)應用的數學知識非常少
(3)解決相關問題的效果非常好
(4)可以解釋機器學習算法使用過程中的很多細節問題
(5)更加完整地刻畫機器學習應用的流程
其原理圖如下:在所有的原有數據集基礎上判斷新的點的屬性分類時,指定k的值,然后找到所有原始數據點中與其新輸入需要判斷的點的最近的k的點,然后根據這k個點的屬性分類來確定新的點的屬性。
圖1 原始數據點
圖2 新輸入點的分布位置,指定k為3,即找到最近的三個點
4、KNN算法原理介紹及其訓練學習代碼實現:
import numpy as np
import matplotlib.pyplot as plt #導入相應的數據可視化模塊
raw_data_X=[[3.393533211,2.331273381],
[3.110073483,1.781539638],
[1.343808831,3.368360954],
[3.582294042,4.679179110],
[2.280362439,2.866990263],
[7.423436942,4.696522875],
[5.745051997,3.533989803],
[9.172168622,2.511101045],
[7.792783481,3.424088941],
[7.939820817,0.791637231]
]
raw_data_Y=[0,0,0,0,0,1,1,1,1,1]
print(raw_data_X)
print(raw_data_Y)
x_train=np.array(raw_data_X)
y_train=np.array(raw_data_Y) #數據的預處理,需要將其先轉換為矩陣,並且作為訓練數據集
print(x_train)
print(y_train)
plt.figure(1)
plt.scatter(x_train[y_train==0,1],x_train[y_train==0,0],color="g")
plt.scatter(x_train[y_train==1,0],x_train[y_train==1,1],color="r") #將其散點圖輸出
x=np.array([8.093607318,3.365731514]) #定義一個新的點,需要判斷它到底屬於哪一類數據類型
plt.scatter(x[0],x[1],color="b") #在算點圖上輸出這個散點,看它在整體散點圖的分布情況
#kNN機器算法的使用
from math import sqrt
distance=[]
for x_train in x_train:
d=sqrt(np.sum((x_train-x)**2))
distance.append(d)
print(distance)
d1=np.argsort(distance) #輸出distance排序的索引值
print(d1)
k=6
n_k=[y_train[(d1[i])] for i in range(0,k)]
print(n_k)
from collections import Counter #導入Counter模塊
c=Counter(n_k).most_common(1)[0][0] #Counter模塊用來輸出一個列表中元素的個數,輸出的形式為列表,其里面的元素為不同的元組
#另外的話對於Counter模塊它有.most_common(x)可以輸出統計數字出現最多的前x個元組,其中元組的key是其元素值,后面的值是出現次數
y_predict=c
print(y_predict)
plt.show() #輸出點的個數
實現代碼及其結果如下: