溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python?sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用

發(fā)布時間:2022-08-30 15:21:58 來源:億速云 閱讀:151 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Python sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用”文章能幫助大家解決問題。

    一、轉(zhuǎn)換器和估計器

    1. 轉(zhuǎn)換器

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

    • 1、實例化 (實例化的是一個轉(zhuǎn)換器類(Transformer))

    • 2、調(diào)用fit_transform(對于文檔建立分類詞頻矩陣,不能同時調(diào)用)

    我們把特征工程的接口稱之為轉(zhuǎn)換器,其中轉(zhuǎn)換器調(diào)用有這么幾種形式:

    • 標(biāo)準(zhǔn)化:(x - mean) / std

    • fit_transform():fit() 計算 每一列的平均值、標(biāo)準(zhǔn)差,transform() (x - mean) / std進行最終的轉(zhuǎn)換

    這幾個方法之間的區(qū)別是什么呢?我們看以下代碼就清楚了

    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的作用相當(dāng)于transform加上fit。

    但是為什么還要提供單獨的fit呢, 我們還是使用原來的std2來進行標(biāo)準(zhǔn)化看看:

    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機器學(xué)習(xí)算法的實現(xiàn))

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

    • 1 實例化一個estimator

    • 2 estimator.fit(x_train, y_train) 計算—— 調(diào)用完畢,模型生成

    • 3 模型評估:1)直接比對真實值和預(yù)測值y_predict = estimator.predict(x_test)
      y_test == y_predict
      2)計算準(zhǔn)確率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、用于無監(jiān)督學(xué)習(xí)的估計器

    • sklearn.cluster.KMeans 聚類

    3.估計器工作流程

    Python?sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用

    二、K-近鄰算法

    1.K-近鄰算法(KNN)

    Python?sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用

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

    2. 定義

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

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

    3. 距離公式

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

    Python?sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用

    三、電影類型分析

    假設(shè)我們有現(xiàn)在幾部電影:

    Python?sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用

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

    Python?sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用

    1 問題

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

    如果取的最近的電影數(shù)量不一樣?會是什么結(jié)果?

    • - k 值取得過小,容易受到異常點的影響

    • - k 值取得過大,樣本不均衡的影響

    2 K-近鄰算法數(shù)據(jù)的特征工程處理

    結(jié)合前面的約會對象數(shù)據(jù),分析K-近鄰算法需要做什么樣的處理

    • 無量綱化的處理

    • 標(biāo)準(zhǔn)化

    四、K-近鄰算法API

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

    • n_neighbors:int,可選(默認(rèn)= 5),k_neighbors查詢默認(rèn)使用的鄰居數(shù)

    • algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可選用于計算最近鄰居的算法:‘ball_tree’將會使用 BallTree,‘kd_tree’將使用 KDTree。‘auto’將嘗試根據(jù)傳遞給fit方法的值來決定最合適的算法。 (不同實現(xiàn)方式影響效率)

    1.步驟

    鳶尾花種類預(yù)測:數(shù)據(jù),我們用的就是sklearn中自帶的鳶尾花數(shù)據(jù)。

    • 1)獲取數(shù)據(jù)

    • 2)數(shù)據(jù)集劃分

    • 3)特征工程

    • 標(biāo)準(zhǔn)化

    • 4)KNN預(yù)估器流程

    • 5)模型評估

    2.代碼

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    def knn_iris():
        """
        用KNN算法對鳶尾花進行分類
        :return:
        """
        # 1)獲取數(shù)據(jù)
        iris = load_iris()
    
        # 2)劃分?jǐn)?shù)據(jù)集
        x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
    
        # 3)特征工程:標(biāo)準(zhǔn)化
        transfer = StandardScaler()
        x_train = transfer.fit_transform(x_train)
        x_test = transfer.transform(x_test)
    
        # 4)KNN算法預(yù)估器
        estimator = KNeighborsClassifier(n_neighbors=3)
        estimator.fit(x_train, y_train)
    
        # 5)模型評估
        # 方法1:直接比對真實值和預(yù)測值
        y_predict = estimator.predict(x_test)
        print("y_predict:\n", y_predict)
        print("直接比對真實值和預(yù)測值:\n", y_test == y_predict)
        # 方法2:計算準(zhǔn)確率
        score = estimator.score(x_test, y_test)
        print("準(zhǔn)確率為:\n", score)
        return None

    3.結(jié)果及分析

    Python?sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用

    結(jié)果分析:準(zhǔn)確率: 分類算法的評估之一

    1、k值取多大?有什么影響?
    k值取很?。喝菀资艿疆惓|c的影響

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

    2、性能問題?
    距離計算上面,時間復(fù)雜度高

    五、K-近鄰總結(jié)

    優(yōu)點:簡單,易于理解,易于實現(xiàn),無需訓(xùn)練

    缺點:

    • 懶惰算法,對測試樣本分類時的計算量大,內(nèi)存開銷大

    • 必須指定K值,K值選擇不當(dāng)則分類精度不能保證

    使用場景: 小數(shù)據(jù)場景,幾千~幾萬樣本,具體場景具體業(yè)務(wù)去測試

    關(guān)于“Python sklearn轉(zhuǎn)換器、估計器和K-近鄰算法怎么應(yīng)用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI