Python?sklearn轉(zhuǎn)換器估計(jì)器和K-近鄰算法

一、轉(zhuǎn)換器和估計(jì)器
1. 轉(zhuǎn)換器
想一下之前做的特征工程的步驟?
- 1、實(shí)例化 (實(shí)例化的是一個(gè)轉(zhuǎn)換器類(Transformer))
- 2、調(diào)用fit_transform(對(duì)于文檔建立分類詞頻矩陣,不能同時(shí)調(diào)用)
我們把特征工程的接口稱之為轉(zhuǎn)換器,其中轉(zhuǎn)換器調(diào)用有這么幾種形式:
- 標(biāo)準(zhǔn)化:(x - mean) / std
- fit_transform():fit() 計(jì)算 每一列的平均值、標(biāo)準(zhǔn)差,transform() (x - mean) / std進(jìn)行最終的轉(zhuǎn)換
這幾個(gè)方法之間的區(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。
但是為什么還要提供單獨(dú)的fit呢, 我們還是使用原來(lái)的std2來(lái)進(jìn)行標(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.估計(jì)器(sklearn機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn))
在sklearn中,估計(jì)器(estimator)是一個(gè)重要的角色,是一類實(shí)現(xiàn)了算法的API
- 1 實(shí)例化一個(gè)estimator
- 2 estimator.fit(x_train, y_train) 計(jì)算—— 調(diào)用完畢,模型生成
- 3 模型評(píng)估:1)直接比對(duì)真實(shí)值和預(yù)測(cè)值y_predict = estimator.predict(x_test)
y_test == y_predict
2)計(jì)算準(zhǔn)確率accuracy = estimator.score(x_test, y_test)
種類:1、用于分類的估計(jì)器:
- sklearn.neighbors k-近鄰算法
- sklearn.naive_bayes 貝葉斯
- sklearn.linear_model.LogisticRegression 邏輯回歸
- sklearn.tree 決策樹(shù)與隨機(jī)森林
2、用于回歸的估計(jì)器:
- sklearn.linear_model.LinearRegression 線性回歸
- sklearn.linear_model.Ridge 嶺回歸
3、用于無(wú)監(jiān)督學(xué)習(xí)的估計(jì)器
- sklearn.cluster.KMeans 聚類
3.估計(jì)器工作流程

二、K-近鄰算法
1.K-近鄰算法(KNN)

你的“鄰居”來(lái)推斷出你的類別
2. 定義
如果一個(gè)樣本在特征空間中的k個(gè)最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個(gè)類別,則該樣本也屬于這個(gè)類別。
來(lái)源:KNN算法最早是由Cover和Hart提出的一種分類算法
3. 距離公式
兩個(gè)樣本的距離可以通過(guò)如下公式計(jì)算,又叫歐式距離

三、電影類型分析
假設(shè)我們有現(xiàn)在幾部電影:

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

1 問(wèn)題
如果取的最近的電影數(shù)量不一樣?會(huì)是什么結(jié)果?
k = 1 愛(ài)情片
k = 2 愛(ài)情片
……
k = 6 無(wú)法確定
k = 7 動(dòng)作片
如果取的最近的電影數(shù)量不一樣?會(huì)是什么結(jié)果?
- - k 值取得過(guò)小,容易受到異常點(diǎn)的影響
- - k 值取得過(guò)大,樣本不均衡的影響
2 K-近鄰算法數(shù)據(jù)的特征工程處理
結(jié)合前面的約會(huì)對(duì)象數(shù)據(jù),分析K-近鄰算法需要做什么樣的處理
- 無(wú)量綱化的處理
- 標(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’},可選用于計(jì)算最近鄰居的算法:‘ball_tree’將會(huì)使用 BallTree,‘kd_tree’將使用 KDTree。‘auto’將嘗試根據(jù)傳遞給fit方法的值來(lái)決定最合適的算法。 (不同實(shí)現(xiàn)方式影響效率)
1.步驟
鳶尾花種類預(yù)測(cè):數(shù)據(jù),我們用的就是sklearn中自帶的鳶尾花數(shù)據(jù)。
- 1)獲取數(shù)據(jù)
- 2)數(shù)據(jù)集劃分
- 3)特征工程
- 標(biāo)準(zhǔn)化
- 4)KNN預(yù)估器流程
- 5)模型評(píng)估
2.代碼
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
def knn_iris():
"""
用KNN算法對(duì)鳶尾花進(jìn)行分類
: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)模型評(píng)估
# 方法1:直接比對(duì)真實(shí)值和預(yù)測(cè)值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比對(duì)真實(shí)值和預(yù)測(cè)值:\n", y_test == y_predict)
# 方法2:計(jì)算準(zhǔn)確率
score = estimator.score(x_test, y_test)
print("準(zhǔn)確率為:\n", score)
return None3.結(jié)果及分析

結(jié)果分析:準(zhǔn)確率: 分類算法的評(píng)估之一
1、k值取多大?有什么影響?
k值取很?。喝菀资艿疆惓|c(diǎn)的影響k值取很大:受到樣本均衡的問(wèn)題
2、性能問(wèn)題?
距離計(jì)算上面,時(shí)間復(fù)雜度高
五、K-近鄰總結(jié)
優(yōu)點(diǎn):簡(jiǎn)單,易于理解,易于實(shí)現(xiàn),無(wú)需訓(xùn)練
缺點(diǎn):
- 懶惰算法,對(duì)測(cè)試樣本分類時(shí)的計(jì)算量大,內(nèi)存開(kāi)銷大
- 必須指定K值,K值選擇不當(dāng)則分類精度不能保證
使用場(chǎng)景: 小數(shù)據(jù)場(chǎng)景,幾千~幾萬(wàn)樣本,具體場(chǎng)景具體業(yè)務(wù)去測(cè)試
到此這篇關(guān)于Python sklearn轉(zhuǎn)換器估計(jì)器和K-近鄰算法的文章就介紹到這了,更多相關(guān)Python sklearn 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于PyQt5實(shí)現(xiàn)一個(gè)無(wú)線網(wǎng)連接器
為了方便不會(huì)python的朋友也能夠使用,本文將用pyqt5將制作一個(gè)帶界面的無(wú)線網(wǎng)連接器,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08
windows下安裝Python的XlsxWriter模塊方法
今天小編就為大家分享一篇windows下安裝Python的XlsxWriter模塊方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Django 連接sql server數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Django 連接sql server數(shù)據(jù)庫(kù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Python定時(shí)庫(kù)Apscheduler的簡(jiǎn)單使用
Apscheduler是基于Quartz的Python定時(shí)任務(wù)框架,功能上跟Quartz一致,使用上跟Quartz也幾乎一致。下面通過(guò)本文給大家介紹Python定時(shí)庫(kù)Apscheduler的簡(jiǎn)單使用,感興趣的朋友一起看看吧2021-11-11
百分百成功的全網(wǎng)最簡(jiǎn)約sklearn環(huán)境配置教程
這篇文章主要介紹了百分百成功的全網(wǎng)最簡(jiǎn)約sklearn環(huán)境配置教程,圖文全流程講解包簡(jiǎn)單易懂,百分百成功,需要的朋友可以參考下2023-03-03
python通過(guò)百度地圖API獲取某地址的經(jīng)緯度詳解
這篇文章主要給大家介紹了關(guān)于python通過(guò)百度地圖API獲取某地址的經(jīng)緯度的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01

