您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python sklearn轉換器、估計器和K-近鄰算法怎么應用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python sklearn轉換器、估計器和K-近鄰算法怎么應用”文章能幫助大家解決問題。
想一下之前做的特征工程的步驟?
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.]])
在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 聚類
你的“鄰居”來推斷出你的類別
如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數屬于某一個類別,則該樣本也屬于這個類別。
來源:KNN算法最早是由Cover和Hart提出的一種分類算法
兩個樣本的距離可以通過如下公式計算,又叫歐式距離
假設我們有現在幾部電影:
其中? 號電影不知道類別,如何去預測?我們可以利用K近鄰算法的思想
如果取的最近的電影數量不一樣?會是什么結果?
k = 1 愛情片
k = 2 愛情片
……
k = 6 無法確定
k = 7 動作片
如果取的最近的電影數量不一樣?會是什么結果?
- k 值取得過小,容易受到異常點的影響
- k 值取得過大,樣本不均衡的影響
結合前面的約會對象數據,分析K-近鄰算法需要做什么樣的處理
無量綱化的處理
標準化
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方法的值來決定最合適的算法。 (不同實現方式影響效率)
鳶尾花種類預測:數據,我們用的就是sklearn中自帶的鳶尾花數據。
1)獲取數據
2)數據集劃分
3)特征工程
標準化
4)KNN預估器流程
5)模型評估
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
結果分析:準確率: 分類算法的評估之一
1、k值取多大?有什么影響?
k值取很小:容易受到異常點的影響k值取很大:受到樣本均衡的問題
2、性能問題?
距離計算上面,時間復雜度高
優點:簡單,易于理解,易于實現,無需訓練
缺點:
懶惰算法,對測試樣本分類時的計算量大,內存開銷大
必須指定K值,K值選擇不當則分類精度不能保證
使用場景: 小數據場景,幾千~幾萬樣本,具體場景具體業務去測試
關于“Python sklearn轉換器、估計器和K-近鄰算法怎么應用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。