首頁 > 軟體

Python sklearn轉換器估計器和K-近鄰演演算法

2022-08-30 18:03:41

一、轉換器和估計器

1. 轉換器

想一下之前做的特徵工程的步驟?

  • 1、範例化 (範例化的是一個轉換器類(Transformer))
  • 2、呼叫fit_transform(對於檔案建立分類詞頻矩陣,不能同時呼叫)

我們把特徵工程的介面稱之為轉換器,其中轉換器呼叫有這麼幾種形式:

  • 標準化:(x - mean) / std
  • fit_transform():fit() 計算 每一列的平均值、標準差,transform() (x - mean) / std進行最終的轉換

這幾個方法之間的區別是什麼呢?我們看以下程式碼就清楚了

In [1]: from sklearn.preprocessing import StandardScaler
In [2]: std1 = StandardScaler()
In [3]: a = [[1,2,3], [4,5,6]]
In [4]: std1.fit_transform(a)
Out[4]:
array([[-1., -1., -1.],
       [ 1.,  1.,  1.]])
In [5]: std2 = StandardScaler()
In [6]: std2.fit(a)
Out[6]: StandardScaler(copy=True, with_mean=True, with_std=True)
In [7]: std2.transform(a)
Out[7]:
array([[-1., -1., -1.],
       [ 1.,  1.,  1.]])

從中可以看出,fit_transform的作用相當於transform加上fit。

但是為什麼還要提供單獨的fit呢, 我們還是使用原來的std2來進行標準化看看:

In [8]: b = [[7,8,9], [10, 11, 12]]
In [9]: std2.transform(b)
Out[9]:
array([[3., 3., 3.],
       [5., 5., 5.]])
In [10]: std2.fit_transform(b)
Out[10]:
array([[-1., -1., -1.],
       [ 1.,  1.,  1.]])

2.估計器(sklearn機器學習演演算法的實現)

在sklearn中,估計器(estimator)是一個重要的角色,是一類實現了演演算法的API

  • 1 範例化一個estimator
  • 2 estimator.fit(x_train, y_train) 計算—— 呼叫完畢,模型生成
  • 3 模型評估:1)直接比對真實值和預測值y_predict = estimator.predict(x_test)
    y_test == y_predict
    2)計算準確率accuracy = estimator.score(x_test, y_test)

種類:1、用於分類的估計器:

  • sklearn.neighbors k-近鄰演演算法
  • sklearn.naive_bayes 貝葉斯
  • sklearn.linear_model.LogisticRegression 邏輯迴歸
  • sklearn.tree 決策樹與隨機森林

2、用於迴歸的估計器:

  • sklearn.linear_model.LinearRegression 線性迴歸
  • sklearn.linear_model.Ridge 嶺迴歸

3、用於無監督學習的估計器

  • sklearn.cluster.KMeans 聚類

3.估計器工作流程

二、K-近鄰演演算法

1.K-近鄰演演算法(KNN)

你的“鄰居”來推斷出你的類別

2. 定義

如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。

來源:KNN演演算法最早是由Cover和Hart提出的一種分類演演算法

3. 距離公式

兩個樣本的距離可以通過如下公式計算,又叫歐式距離

三、電影型別分析

假設我們有現在幾部電影:

其中? 號電影不知道類別,如何去預測?我們可以利用K近鄰演演算法的思想

1 問題

如果取的最近的電影數量不一樣?會是什麼結果?
k = 1 愛情片
k = 2 愛情片
……
k = 6 無法確定
k = 7 動作片

如果取的最近的電影數量不一樣?會是什麼結果?

  • - k 值取得過小,容易受到異常點的影響
  • - k 值取得過大,樣本不均衡的影響

2 K-近鄰演演算法資料的特徵工程處理

結合前面的約會物件資料,分析K-近鄰演演算法需要做什麼樣的處理

  • 無量綱化的處理
  • 標準化

四、K-近鄰演演算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)n_neighbors:k值

  • n_neighbors:int,可選(預設= 5),k_neighbors查詢預設使用的鄰居數
  • algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可選用於計算最近鄰居的演演算法:‘ball_tree’將會使用 BallTree,‘kd_tree’將使用 KDTree。‘auto’將嘗試根據傳遞給fit方法的值來決定最合適的演演算法。 (不同實現方式影響效率)

1.步驟

鳶尾花種類預測:資料,我們用的就是sklearn中自帶的鳶尾花資料。

  • 1)獲取資料
  • 2)資料集劃分
  • 3)特徵工程
  • 標準化
  • 4)KNN預估器流程
  • 5)模型評估

2.程式碼

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
def knn_iris():
    """
    用KNN演演算法對鳶尾花進行分類
    :return:
    """
    # 1)獲取資料
    iris = load_iris()

    # 2)劃分資料集
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)

    # 3)特徵工程:標準化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4)KNN演演算法預估器
    estimator = KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train, y_train)

    # 5)模型評估
    # 方法1:直接比對真實值和預測值
    y_predict = estimator.predict(x_test)
    print("y_predict:n", y_predict)
    print("直接比對真實值和預測值:n", y_test == y_predict)
    # 方法2:計算準確率
    score = estimator.score(x_test, y_test)
    print("準確率為:n", score)
    return None

3.結果及分析

結果分析:準確率: 分類演演算法的評估之一

1、k值取多大?有什麼影響?
k值取很小:容易受到異常點的影響

k值取很大:受到樣本均衡的問題

2、效能問題?
距離計算上面,時間複雜度高

五、K-近鄰總結

優點:簡單,易於理解,易於實現,無需訓練

缺點:

  • 懶惰演演算法,對測試樣本分類時的計算量大,記憶體開銷大
  • 必須指定K值,K值選擇不當則分類精度不能保證

使用場景: 小資料場景,幾千~幾萬樣本,具體場景具體業務去測試

到此這篇關於Python sklearn轉換器估計器和K-近鄰演演算法的文章就介紹到這了,更多相關Python sklearn 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com