日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【scikit-learn基础】--『监督学习』之 K-近邻分类

發布時間:2024/1/5 windows 32 coder
生活随笔 收集整理的這篇文章主要介紹了 【scikit-learn基础】--『监督学习』之 K-近邻分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

KNN(K-近鄰),全稱K-Nearest Neighbors,是一種常用的分類算法
KNN算法的歷史可以追溯到1957年,當時Cover和Hart提出了“最近鄰分類”的概念。
但是,這個算法真正得到廣泛認知和應用是在1992年,由Altman發表的一篇名為“K-Nearest Neighbors”的文章。

近年來,隨著大數據和機器學習的快速發展,KNN算法因其簡單且表現優秀,被廣泛應用于各種數據分類問題中。

1. 算法概述

KNN算法的基本原理是:在特征空間中,如果一個樣本的最接近的k個鄰居中大多數屬于某一個類別,則該樣本也屬于這個類別。
換句話說,KNN算法假設類別是由其鄰居決定的。

那么,KNN算法判斷數據是否相似是關鍵,也就是數據之間的距離是如何計算的呢?
最常用的距離計算公式有:

  1. 曼哈頓距離\(L_1(x_i,x_j)= \sum_{l=1}^{n} |x_i^{(l)}-x_j^{(l)}|\)
  2. 歐氏距離\(L_2(x_i,x_j) = (\sum_{l=1}^{n} \; |x_i^{(l)}-x_j^{(l)}|^{2})^{\frac{1}{2}}\)
  3. 閔可夫斯基距離\(L_p(x_i,x_j) = (\sum_{l=1}^{n} \; |x_i^{(l)}-x_j^{(l)}|^{2})^{\frac{1}{p}}\)
  4. 等等

使用不同的距離,就會得到不同的分類效果。

2. 創建樣本數據

這次用scikit-learn中的樣本生成器make_classification來生成分類用的樣本數據。

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification

# 分類數據的樣本生成器
X, y = make_classification(n_samples=1000, n_classes=4, n_clusters_per_class=1)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)

plt.show()


關于樣本生成器的詳細內容,請參考:TODO

3. 模型訓練

首先,分割訓練集測試集

from sklearn.model_selection import train_test_split

# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

這次按照8:2的比例來劃分訓練集和測試集。

然后用scikit-learn中的KNeighborsClassifier模型來訓練:

from sklearn.neighbors import KNeighborsClassifier

# 定義KNN模型(設置4個分類,因為樣本數據是4個分類)
reg = KNeighborsClassifier(n_neighbors=4)

# 訓練模型
reg.fit(X_train, y_train)

# 在測試集上進行預測
y_pred = reg.predict(X_test)

KNeighborsClassifier的主要參數包括:

  1. n_neighbors:這是kNN算法中的k值,即選擇最近的k個點。默認值為5。
  2. weights:此參數默認為'uniform',也可以設置為'distance',或者用戶自定義的函數。其中,'uniform'表示所有的鄰近點的權重都是相等的,'distance'表示距離近的點比距離遠的點的影響大。
  3. algorithm:此參數默認為'auto',也可以設置為'auto','ball_tree','kd_tree',或'brute'。這決定了在計算最近鄰時使用的算法。
  4. leaf_size:此參數默認為30,也可以設置為一個整數,用于指定傳遞給構建葉子節點時使用的最小樣本數。
  5. p:此參數默認為2,也可以設置為一個值<=1。這決定了在計算Minkowski距離度量時使用的p值。
  6. metric:此參數默認為'minkowski',也可以設置為'euclidean','manhattan'等。這決定了距離度量方法。
  7. metric_params:此參數默認為None,也可以是一個字典,包含了額外的關鍵字參數傳遞給距離度量函數。
  8. n_jobs:此參數默認為None,也可以是一個大于等于1的整數,表示可用于執行并行計算的CPU數量。

最后驗證模型的訓練效果:

# 比較測試集中有多少個分類預測正確
correct_pred = np.sum(y_pred == y_test)

print("預測正確率:{}%".format(correct_pred/len(y_pred)*100))

# 運行結果
預測正確率:68.5%

模型使用了默認的參數,可以看出,模型正確率不高。
感興趣的同學可以試試調整KNeighborsClassifier的參數,看看是否可以提高模型的預測正確率。

4. 總結

KNN算法被廣泛應用于各種不同的應用場景,如圖像識別、文本分類、垃圾郵件識別、客戶流失預測等。
這些場景的一個共同特點是,需要對一個未知的樣本進行快速的分類或預測。

KNN算法主要優勢在于:

  1. 簡單直觀KNN算法的概念簡單直觀,容易理解和實現。
  2. 適用于小樣本數據KNN算法在小樣本數據上的表現往往優于其他機器學習算法。
  3. 對數據預處理要求較低KNN算法不需要對數據進行復雜的預處理,例如標準化、歸一化等。

不過,KNN算法也有不足之處:

  1. 計算量大:對于大型數據集,KNN算法可能需要大量的存儲空間和計算時間,因為需要計算每個樣本與所有已知樣本的距離。
  2. 選擇合適的K值困難K值的選擇對結果影響很大,選擇不當可能會導致結果的不穩定。
  3. 對噪聲數據敏感:如果數據集中存在噪聲數據,KNN算法可能會受到較大影響。

總結

以上是生活随笔為你收集整理的【scikit-learn基础】--『监督学习』之 K-近邻分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。