python的scikit-learn算法库实现
文章目錄
- 1.sklearn工具包
- 2. sklearn 實現(xiàn)KNN
- 3.breast_cancer 數(shù)據(jù)集
1.sklearn工具包
在機(jī)器學(xué)習(xí)的世界,總有著源碼與調(diào)包之爭。
調(diào)包的人不需要對算法理解得太過深刻,對背后的數(shù)學(xué)原理長久不用可能也會忘記,只需要調(diào)用他人寫好的代來達(dá)成自己的目的,因此被寫源碼的人嘲笑嫌棄,業(yè)界甚至流傳著"調(diào)包俠”的惡名,指那些只會調(diào)用其他人寫好的代碼,自己不寫代碼的人。然而,這其實只是一種假象一真正自己寫的,只有超巨大廠BAT,頭條,小米等等這些公司,他們擁有巨大的技術(shù)團(tuán)隊,超強(qiáng)硬件支撐,并且擁有過于細(xì)致的需求,以至于市面上以"大而全”為目標(biāo)的算法庫無法滿足他們的需要。而這些公司中真正有價值的機(jī)器學(xué)習(xí)工程師,每天都在忙于改變世界,根本不會混到初學(xué)者的圈子里來。世界上幾乎90%的算法公司都使用別人寫好的包,因為自己創(chuàng)造算法不是那么簡單的事兒。且不說如果自己寫算法能否寫得比市面上已經(jīng)存在得包還快還穩(wěn)定,-個算法不僅僅是要實現(xiàn)對結(jié)果的預(yù)測,它最終要最終部署到整個系統(tǒng)中,實現(xiàn)在產(chǎn)品上,是有非常長的一段路需要走的,其中包括了從后端數(shù)據(jù)庫到前端產(chǎn)品的一系列過程,如果你的算法是自己寫的,你的兼容性很難保證,除非公司的所有技術(shù)接口都是自己寫的一套程序!而這對于世界上的大部分公司來說根本不可能,沒那么閑,沒那么多資源和時間。
sklearn官方文檔
自2007年發(fā)布以來,scikit-learn已經(jīng)成為Python中重要的機(jī)器學(xué)習(xí)庫了。scikit-learn, 簡稱sklearn, 支持了包括分類、回歸、降維和聚類四大機(jī)器學(xué)習(xí)算法,以及特征提取、數(shù)據(jù)預(yù)處理和模型評估三大模塊。
在工程應(yīng)用中,用Python手寫代碼來從頭實現(xiàn)一個算法的可能性非常低,這樣不僅耗時耗力,還不一定能夠?qū)懗鰳?gòu)架清晰,穩(wěn)定性強(qiáng)的模型。更多情況下,是分析采集到的數(shù)據(jù),根據(jù)數(shù)據(jù)特征選擇適合的算法,在工具包中調(diào)用算法,調(diào)整算法的參數(shù),獲取需要的信息,從而實現(xiàn)算法效率和效果之間的平衡。而sklearn,正是這樣一個可以幫助我們高效實現(xiàn)算法應(yīng)用的工具包。
sklearn基本建模流程
- 主要設(shè)計原則
一致性: 所有對象共享一個簡單一致的界面(接口)。
● 估算器: fit()方法。 基于數(shù)據(jù)估算參數(shù)的任意對象,使用的參數(shù)是一 個數(shù)據(jù)集(對應(yīng)X,有監(jiān)督算法還需要一 個y),引導(dǎo)估算過程的任意其他參數(shù)稱為超參數(shù),必須被設(shè)置為實例變量。
● 轉(zhuǎn)換器: transform0方法。 使用估算器轉(zhuǎn)換數(shù)據(jù)集,轉(zhuǎn)換過程依賴于學(xué)習(xí)參數(shù)。可以使用便捷方式:fit transform0,相當(dāng)于先fit()再transform0. (fit transform有時被優(yōu)化過,速度更快)
● 預(yù)測器: predictQ方法。 使用估算器預(yù)測新數(shù)據(jù),返回包含預(yù)測結(jié)果的數(shù)據(jù),還有score(方法:用于度量給定測試集的預(yù)測效果的好壞。(連續(xù)y使用R方,分類y使用準(zhǔn)確率accuracy)
監(jiān)控:
檢查所有參數(shù),所有估算器的超參數(shù)可以通過公共實例變量訪問,所有估算器的學(xué)習(xí)參數(shù)都可以通過有下劃線后綴的公共實例變量訪問。
防止類擴(kuò)散:
對象類型固定,數(shù)據(jù)集被表示為Numpy數(shù)組或Scipy稀疏矩陣,超參是普通的Python字符或數(shù)字。
合成:
現(xiàn)有的構(gòu)件盡可能重用,可以輕松創(chuàng)建一個流水線Pipeline。
合理默認(rèn)值:
大多數(shù)參數(shù)提供合理默認(rèn)值,可以輕松搭建一個基 本的工作系統(tǒng)。
CLF、KNN、DT、RF、SVM都支持估算器功能
2. sklearn 實現(xiàn)KNN
KNN實現(xiàn)分類問題,是不需要先使用數(shù)據(jù),可以先訓(xùn)練一組數(shù)據(jù),然后進(jìn)行分類,這里分成三類,P為測試點,三類中心點為[0,0],[1,1],[-1,1]
# sklearn 實現(xiàn) X , y = make_blobs(n_samples = 50,cluster_std = [0.3, 0.3, 0.3],centers = [[0,0],[1,1],[-1,1]],random_state = r) p = [[0.5, 1.5]] from sklearn.neighbors import KNeighborsClassifier clf = KNeighborsClassifier(n_neighbors = 4) #實例化 clf.fit(X, y) #訓(xùn)練數(shù)據(jù) clf.predict(p) #預(yù)測數(shù)據(jù)3.breast_cancer 數(shù)據(jù)集
導(dǎo)入breast_cancer 數(shù)據(jù)集
# breast_cancer 數(shù)據(jù)集from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split# 探索數(shù)據(jù)集 data = load_breast_cancer() x = data['data'] y = data['target']訓(xùn)練數(shù)據(jù)集
name = ['平均半徑','平均紋理','平均周長','平均面積','平均光滑度','平均緊湊度','平均凹度','平均凹點','平均對稱','平均分形維數(shù)','半徑誤差','紋理誤差','周長誤差','面積誤差','平滑度誤差','緊湊度誤差','凹度誤差','凹點誤差','對稱誤差','分形維數(shù)誤差','最差半徑','最差紋理','最差的邊界','最差的區(qū)域','最差的平滑度','最差的緊湊性','最差的凹陷','最差的凹點','最差的對稱性','最差的分形維數(shù)']pd.DataFrame(x, columns = name) from sklearn.neighbors import KNeighborsClassifier clf = KNeighborsClassifier(n_neighbors = 10) #實例化 clf.fit(x, y)預(yù)測數(shù)據(jù)準(zhǔn)確率
clf.score(x, y) # 準(zhǔn)確率的計算或者這個也一樣
#準(zhǔn)確率的計算 total_data = pd.DataFrame(x, columns = name) total_data['Y'] = y total_data['Y_pred'] = clf.predict(x) (total_data['Y'] == total_data['Y_pred']).sum() / x.shape[0]結(jié)果
0.9420035149384886劃分訓(xùn)練集和測試集正確率
# 劃分訓(xùn)練集和測試集 from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3#,random_state = 420)clf = KNeighborsClassifier(n_neighbors = 2) #實例化 clf.fit(x_train, y_train) clf.score(x_train, y_train), clf.score(x_test, y_test)正確率百分比
(0.9698492462311558, 0.9181286549707602)大于5%屬于過擬合結(jié)果。
**過擬合:**模型在訓(xùn)練集下面學(xué)的實在太好了,將訓(xùn)練集的嶸音誤當(dāng)成X與Y的真實的規(guī)律學(xué)習(xí)進(jìn)去了,從而在測試集上的表現(xiàn)非常差
總結(jié)
以上是生活随笔為你收集整理的python的scikit-learn算法库实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫取腾讯视频评论
- 下一篇: Python机器学习--KNN归一化、距