close

我使用的版本如下:

Python 3.10

sklearn 1.2.1

本文使用python機器學習套件scikit-learn開發k近鄰演算法(K nearest neighbors),並進行訓練、驗證與預測,以下分成四大步驟:

  1. 建立資料
  2. 進行訓練
  3. 進行驗證
  4. 進行預測

最後提供完整程式碼

 

k近鄰演算法,k代表訓練資料有幾類,然後會把每個訓練類別建置代表向量,後續進來的資料則會與這些代表向量計算距離,來判斷新進的資料屬於哪一個類別,程式碼如下:

 

步驟一: 建立資料

#建立資料
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
x = iris.data
y = iris.target


#將資料切割為訓練與測試,test_size = 0.2 代表測試集大小為20%random_state = 0代表每次都用相同的案例
xTrain, xTest, yTrain, yTest = train_test_split(x,y,test_size=0.2,random_state=0)

我使用sklearn內建的鳶尾花資料集,train_test_split函式主要是將資料集拆分成訓練與測試,test_size=0.2 就是測試資料比例為20%random_state=0代表每次都用同一筆資料,不會隨機選

 

步驟二: 進行訓練

#訓練模型
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(xTrain,yTrain)

K近鄰演算法放在 sklearn.neighbors中,名稱則為 KNeighborsClassifierfit函式就是訓練。

 

步驟三:進行驗證

#驗證模型
validation = knn.score(xTest,yTest)
print("20%的測試資料結果為: ",validation)

 

結果如下:

fig1.png

 

步驟四:進行預測

#建立假資料進行預測
import numpy as np
fakeData = np.linspace(
1,5,20) #先建立1~5裡面隨機取20個值
print("隨機建立的值: ",fakeData)
#鳶尾花一筆資料是4個值,所以我們要把它改成5x4
norFakeData = np.array(fakeData).reshape(5,4);
print("使用reshape變換資料形狀: ",norFakeData)

#預測
predicted = knn.predict(norFakeData);
print("預測結果:", predicted)

我使用numpylinspace函式,建立20筆介於1~5的資料,如下:

fig1.png

 

然後我用numpyreshape功能,把資料轉成knn可以吃的型態,每筆就是四個維度,20筆就是轉成5筆,得到的結果如下:

fig1.png

 

最後用predict函式進行預測:

fig1.png

 

以上就是使用scikit-learn開發knn的步驟,完整程式碼如下:

#建立資料
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
x = iris.data
y = iris.target


#將資料切割為訓練與測試,test_size = 0.2 代表測試集大小為20%random_state = 0代表每次都用相同的案例
xTrain, xTest, yTrain, yTest = train_test_split(x,y,test_size=0.2,random_state=0)

#訓練模型
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(xTrain,yTrain)


#驗證模型
validation = knn.score(xTest,yTest)
print("20%的測試資料結果為: ",validation)

#建立假資料進行預測
import numpy as np
fakeData = np.linspace(
1,5,20) #先建立1~5裡面隨機取20個值
print("隨機建立的值: ",fakeData)
#鳶尾花一筆資料是4個值,所以我們要把它改成5x4
norFakeData = np.array(fakeData).reshape(5,4);
print("使用reshape變換資料形狀: ",norFakeData)

#預測
predicted = knn.predict(norFakeData);
print("預測結果:", predicted)

打完收工,歡迎留言討論交流。

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 葛瑞斯肯 的頭像
    葛瑞斯肯

    葛瑞斯肯樂活筆記

    葛瑞斯肯 發表在 痞客邦 留言(0) 人氣()