knn算法是人工智能的基本算法,類似於語言中的"hello world!",python中的機器學習核心模塊:Scikit-Learn
Scikit-learn(sklearn)模塊,為Python語言實現機器學習的核心模塊,其包含了大量的算法模型函數API,
可以讓我們很輕松地創建、訓練、評估 算法模型。同時該模塊也是Python在人工智能(機器學習)領域的基礎應用模塊。
核心依賴模塊:
NumPy:pip install –U numpy
Scipy:pip install –U scipy
Pandas:pip install –U pandas
Matplotlib:pip install –U matplotlib
Scikit-Learn模塊:
Scikit-Learn:pip install –U scikit-learn
機器學習分為五個步驟:
1.算法選型 看選擇監督學習還是無監督學習
2.樣本數據划分 需要樣本數據對模型進行訓練
3.魔性訓練 使用fit()方法 算法模型對象.fit( X_train_features, X_train_labels )
4.模型評估 metrics 使用sklearn中的 meterics 類可以實現對訓練后的模型進行量化指標評估
5.模型預測 predict Predict實現了對測試數據驗證以及用於對新數據的預測
KNN算法的簡單應用,文檔樹:
其中numbers.csv數據如下:
number,classes
1,A
2,A
3,A
4,B
5,B
6,B
7,C
8,C
9,C
num_knn.py源碼:
from sklearn.neighbors import KNeighborsClassifier import numpy as np import matplotlib.pyplot as plt import os import pandas as pd import imp from sklearn.model_selection import train_test_split data=pd.read_csv(os.getcwd()+'\data'+os.sep+'numbers.csv') print('原始數據:\n',data) X_train,X_test,y_train,y_test=train_test_split(data['number'],data['classes'],test_size=0.25,random_state=40) print('訓練特征值:\n',X_train.values) print('訓練標簽值:\n',y_train.values) print('測試特征值:\n',X_test.values) print('測試標簽值:\n',y_test.values) #print(y_train) #print(y_test) plt.scatter(y_train,X_train) print('創建knn模型對象...') knn=KNeighborsClassifier(n_neighbors=3) print('開始訓練knn模型...') knn.fit(X_train.values.reshape(len(X_train),1),y_train) #print(X_train.values) #print(X_train.values.reshape(len(X_train),1)) #變成列向量 # 評估函數 # 算法對象.score(測試特征值數據, 測試標簽值數據) score=knn.score(X_test.values.reshape(len(X_test),1),y_test) print('模型訓練綜合得分:',score) # 步驟6:模型預測 # predict()函數實現 # predict(新數據(二維數組類型)): 分類結果 result = knn.predict([[12],[1.5]]) print('分類預測的結果為:{0},{1}'.format(result[0],result[1])) # 繪制測試數據點 plt.scatter(result[0], 12, color='r') plt.scatter(result[1], 1.5, color='g') plt.grid(linestyle='--') plt.show()
運行結果如下圖:
KNN第二個例子:
movies.csv:
filename,war_count,love_count,movietype
movieA,3,104,愛情片
movieB,2,100,愛情片
movieC,1,81,愛情片
movieD,101,10,戰爭片
movieF,99,5,戰爭片
movieF,98,2,戰爭片
movie_knn.py:
import pandas as pd import os import imp #導入分解詞 from sklearn.model_selection import train_test_split #導入knn算法模型 from sklearn.neighbors import KNeighborsClassifier # 導入分類器性能監測報告模塊 from sklearn.metrics import classification_report def loaddata(filepath): #加載數據 data=pd.read_csv(filepath) print('樣本數據集:\n',data) #print('樣本數據集:\n{0}'.format(data)) # 步驟2:數據抽取 # 獲取war_count、love_count、movietype列數據 data = data[['war_count', 'love_count', 'movietype']] print('原始樣本數據集(數據抽取):\n{0}'.format(data)) # 返回數據 return data def splitdata(data): print('--數據划分--') X_train,X_test,y_train,y_test=train_test_split(data[['war_count','love_count']],data['movietype'],\ test_size=0.25,random_state=30) print('訓練樣本特征集:\n', X_train.values) print('訓練樣本標簽集:\n', X_test.values) print('測試樣本特征集:\n', y_train.values) print('測試樣本標簽集:\n', y_test.values) # 返回數據 return X_train, X_test, y_train, y_test def ModelTraing(X_train,X_test,y_train,y_yest): #先創建knn算法模型 print('knn算法模型...') knn=KNeighborsClassifier(n_neighbors=3) #訓練算法模型 print('算法模型訓練...') knn.fit(X_train,y_train) #訓練模型評估 result=knn.predict(X_test) print('knn訓練模型測試報告:\n') print(classification_report(y_test,result,target_names=data['movietype'].unique())) return knn if __name__=='__main__': # 設置數據文件的地址 filePath = os.getcwd() + '\data' + os.sep + 'movies.csv' print(filePath) # 加載數據文件 data = loaddata(filePath) # 數據划分 X_train, X_test, y_train, y_test = splitdata(data) # 模型訓練 knn = ModelTraing(X_train, X_test, y_train, y_test) # 模型應用 movietype = knn.predict([[20, 94]]) print('電影分類預測結果為:{0}'.format(movietype[0]))
代碼運行結果:
附上GitHub地址 tyutltf/knn_basic: knn的簡單例子 https://github.com/tyutltf/knn_basic