机器学习(6)KNN算法(K-近邻算法)
生活随笔
收集整理的這篇文章主要介紹了
机器学习(6)KNN算法(K-近邻算法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一、基礎理論
1、估計器?
1、生成模型
2、 模型評估
2、KNN基礎
3、API
二、過程
1、獲取數據
2、劃分數據集
3、特征工程(標準化)
4、KNN算法預估器
4-1、得到預估器
4-2、訓練(用設置好的預估器對訓練值進行訓練)
5、模型評估
5-1、得到預估器的預測結果?
5-2、對比預測值和測量目標值
5-3、得到準確率(對比特征集和目標集測試值)
代碼
一、基礎理論
1、估計器?
1、生成模型
?estimator.fit(train_data, train_target)
2、 模型評估
方法一:直接比對真實值和預測值
test_target = estimator.predict(train_test)
test_target == test_predict
方法二:計算準確率
accuracy = estimator.score(train_test, target_test)
?
2、KNN基礎
?
核心思想:根據鄰居推斷類別。取k個鄰居,哪個類別更多,則歸為哪個。
?定義:如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數屬于某一個類別,則該樣本也屬于這個類別。
?
例:?
?
k值取得過小:容易受到異常點的影響。
k值取得過大:容易受到樣本不均衡的影響。
應用場景:少量數據。
計算距離:歐氏距離、曼哈頓距離、明可夫斯基距離
歐氏距離
曼哈頓距離:絕對值距離
?
3、API
sklearn.neighbors.KNeighborsClassifier
二、過程
1、獲取數據
# 1、獲取數據iris = load_iris()
2、劃分數據集
對特征值和目標值進行劃分,得到:
特征訓練集、特征測試集、目標訓練集、目標測試集。
# 2、劃分數據集train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target)# 特征集訓練值 特征集測試值 目標集訓練值 目標值測試值
3、特征工程(標準化)
對特征集(特征訓練集和特征測試集)進行標準化。
# 3、特征工程(標準化)transfer = StandardScaler()train_data = transfer.fit_transform(train_data)test_data = transfer.transform(test_data)# 注:不進行fit處理:測試集要用訓練集的特征值和標準差(否則測試集就是在自己對自己進行測試,沒有意義)# 注:target是目標值,不能進行標準化(所以train_target和test_target不進行標準化)
4、KNN算法預估器
4-1、得到預估器
這里設置鄰居(k值)為3 ,也就是從最近的3個元素中做評估。
# 4-1、得到預估器estimator = KNeighborsClassifier(n_neighbors = 3) #n_neighbors:k(鄰居為3)
4-2、訓練(用設置好的預估器對訓練值進行訓練)
# 4-2、訓練estimator.fit(train_data, train_target)
5、模型評估
方法一:比對預測值和目標值
# 方法一:對比預測值和測量目標值predict = estimator.predict(test_data) # 得到預測結果print(predict)print("直接比對預測值和測量目標值:\n", predict==test_target)
方法二:得到準確率
# 方法二:計算準確率score = estimator.score(test_data, test_target)print("準確率:\n", score)
代碼
# KNN算法(K-近鄰算法)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier# KNN算法
def KNN():# 1、獲取數據iris = load_iris()# 2、劃分數據集train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target)# 特征集訓練值 特征集測試值 目標集訓練值 目標值測試值# 3、特征工程(標準化)transfer = StandardScaler()train_data = transfer.fit_transform(train_data)test_data = transfer.transform(test_data)# 注:不進行fit處理:測試集要用訓練集的特征值和標準差(否則測試集就是在自己對自己進行測試,沒有意義)# 注:target是目標值,不能進行標準化(所以train_target和test_target不進行標準化)# 4、KNN算法預估器# 4-1、得到預估器estimator = KNeighborsClassifier(n_neighbors = 3) #n_neighbors:k(鄰居為3)# 4-2、訓練(用預估器對訓練值進行訓練)estimator.fit(train_data, train_target)# 5、模型評估# 方法一:對比預測值和測量目標值predict = estimator.predict(test_data) # 得到預測結果print(predict)print("直接比對預測值和測量目標值:\n", predict==test_target)# 方法二:計算準確率score = estimator.score(test_data, test_target)print("準確率:\n", score)if __name__ == '__main__':KNN() #KNN算法
缺點:K值的確定。
總結
以上是生活随笔為你收集整理的机器学习(6)KNN算法(K-近邻算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(5)降维 -- 特征选择(低方
- 下一篇: 机器学习(实战)facebook地址预测