scikit-learn 的建模萬能模板!
點擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達 ![]()
算法工程師是伴隨著人工智能火起來的一個領(lǐng)域。聽著名字似乎門檻很高。但是,得益于Python生態(tài)下的包共享機制,機器學(xué)習(xí)模型構(gòu)建的過程其實已經(jīng)變得非常簡單了,很多聽起來牛逼的算法,其實根本不需要自己實現(xiàn),甚至都不需要知道這些算法的具體原理。
-
明確你需要解決的問題是什么類型,以及知道解決該類型問題所對應(yīng)的算法。 -
從skicit-learn中調(diào)用相應(yīng)的算法構(gòu)建模型即可。是的!在機器學(xué)習(xí)領(lǐng)域,如果你只是抱著體驗機器學(xué)習(xí)的心態(tài),實現(xiàn)起來就是這么簡單。
第一步很好解決
1、加載數(shù)據(jù)集
from sklearn.datasets import load_iris
data = load_iris()
x = data.data
y = data.target
array([[5.1, 3.5, 1.4, 0.2], [4.9, 3. , 1.4, 0.2], [4.7, 3.2, 1.3, 0.2], [4.6, 3.1, 1.5, 0.2], [5. , 3.6, 1.4, 0.2], [5.4, 3.9, 1.7, 0.4], [4.6, 3.4, 1.4, 0.3], [5. , 3.4, 1.5, 0.2], [4.4, 2.9, 1.4, 0.2], [4.9, 3.1, 1.5, 0.1], [5.4, 3.7, 1.5, 0.2], [4.8, 3.4, 1.6, 0.2], [4.8, 3. , 1.4, 0.1], [4.3, 3. , 1.1, 0.1], …………
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
2、數(shù)據(jù)集拆分
train_test_split的目的是保證從數(shù)據(jù)集中均勻拆分出測試集。這里,簡單把10%的數(shù)據(jù)集拿出來用作測試集。
from sklearn.model_selection import train_test_split
train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.1,random_state=0)
萬能模板V1.0版
助你快速構(gòu)建一個基本的算法模型
模板1.0應(yīng)用案例
1、構(gòu)建SVM分類模型
scikit-learn.svm.SVC下,所以:
-
算法位置填入: svm -
算法名填入: SVC() -
模型名自己起,這里我們就叫 svm_model
# svm分類器
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
svm_model = SVC()
svm_model.fit(train_x,train_y)
pred1 = svm_model.predict(train_x)
accuracy1 = accuracy_score(train_y,pred1)
print('在訓(xùn)練集上的精確度: %.4f'%accuracy1)
pred2 = svm_model.predict(test_x)
accuracy2 = accuracy_score(test_y,pred2)
print('在測試集上的精確度: %.4f'%accuracy2)
在訓(xùn)練集上的精確度: 0.9810
在測試集上的精確度: 0.9778
2、構(gòu)建LR分類模型
sklearn.linear_model.LogisticRegression下,所以:
-
算法位置填入: linear_model -
算法名填入: LogisticRegression -
模型名叫做:lr_model。
# LogisticRegression分類器
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score #評分函數(shù)用精確度評估
lr_model = LogisticRegression()
lr_model.fit(train_x,train_y)
pred1 = lr_model.predict(train_x)
accuracy1 = accuracy_score(train_y,pred1)
print('在訓(xùn)練集上的精確度: %.4f'%accuracy1)
pred2 = lr_model.predict(test_x)
accuracy2 = accuracy_score(test_y,pred2)
print('在測試集上的精確度: %.4f'%accuracy2)
在訓(xùn)練集上的精確度: 0.9429
在測試集上的精確度: 0.8889
3、構(gòu)建隨機森林分類模型
sklearn.ensemble.RandomForestClassifier 下,好了,現(xiàn)在你應(yīng)該可以自己寫了,這個作為本文的一個小測試,歡迎在評論區(qū)寫下你的答案。
萬能模板V2.0版
加入交叉驗證,讓算法模型評估更加科學(xué)
cross_val_score() 這個函數(shù)里了,只需要調(diào)用該函數(shù)即可,不需要自己想什么拆分算法,也不用寫for循環(huán)進行循環(huán)訓(xùn)練。
# 輸出精確度的平均值
# print("訓(xùn)練集上的精確度: %0.2f " % scores1.mean())
# 輸出精確度的平均值和置信度區(qū)間
print("訓(xùn)練集上的平均精確度: %0.2f (+/- %0.2f)" % (scores2.mean(), scores2.std() * 2))
模板2.0應(yīng)用案例:
1、構(gòu)建SVM分類模型
### svm分類器
from sklearn.model_selection import cross_val_score
from sklearn.svm import SVC
svm_model = SVC()
svm_model.fit(train_x,train_y)
scores1 = cross_val_score(svm_model,train_x,train_y,cv=5, scoring='accuracy')
# 輸出精確度的平均值和置信度區(qū)間
print("訓(xùn)練集上的精確度: %0.2f (+/- %0.2f)" % (scores1.mean(), scores1.std() * 2))
scores2 = cross_val_score(svm_model,test_x,test_y,cv=5, scoring='accuracy')
# 輸出精確度的平均值和置信度區(qū)間
print("測試集上的平均精確度: %0.2f (+/- %0.2f)" % (scores2.mean(), scores2.std() * 2))
print(scores1)
print(scores2)
訓(xùn)練集上的精確度: 0.97 (+/- 0.08)
測試集上的平均精確度: 0.91 (+/- 0.10)
[1. 1. 1. 0.9047619 0.94736842]
[1. 0.88888889 0.88888889 0.875 0.875 ]
2、構(gòu)建LR分類模型
# LogisticRegression分類器
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
lr_model = LogisticRegression()
lr_model.fit(train_x,train_y)
scores1 = cross_val_score(lr_model,train_x,train_y,cv=5, scoring='accuracy')
# 輸出精確度的平均值和置信度區(qū)間
print("訓(xùn)練集上的精確度: %0.2f (+/- %0.2f)" % (scores1.mean(), scores1.std() * 2))
scores2 = cross_val_score(lr_model,test_x,test_y,cv=5, scoring='accuracy')
# 輸出精確度的平均值和置信度區(qū)間
print("測試集上的平均精確度: %0.2f (+/- %0.2f)" % (scores2.mean(), scores2.std() * 2))
print(scores1)
print(scores2)
訓(xùn)練集上的精確度: 0.94 (+/- 0.07)
測試集上的平均精確度: 0.84 (+/- 0.14)
[0.90909091 1. 0.95238095 0.9047619 0.94736842]
[0.90909091 0.88888889 0.88888889 0.75 0.75 ]
cross_validate()函數(shù)。
萬能模板V3.0版
調(diào)參讓算法表現(xiàn)更上一層樓
算法().get_params()方法來查看每個算法可以調(diào)整的參數(shù),比如說,我們想查看SVM分類器算法可以調(diào)整的參數(shù),可以:
SVC().get_params()
{'C': 1.0,
'cache_size': 200,
'class_weight': None,
'coef0': 0.0,
'decision_function_shape': 'ovr',
'degree': 3,
'gamma': 'auto',
'kernel': 'rbf',
'max_iter': -1,
'probability': False,
'random_state': None,
'shrinking': True,
'tol': 0.001,
'verbose': False}
best_model就是我們得到的最優(yōu)模型,可以利用這個模型進行預(yù)測。
best_model 還有好多好用的屬性:
-
best_model.cv_results_:可以查看不同參數(shù)情況下的評價結(jié)果。 -
best_model.param_:得到該模型的最優(yōu)參數(shù) -
best_model.best_score_: 得到該模型的最后評分結(jié)果
模板3.0應(yīng)用案例
實現(xiàn)SVM分類器
###1、svm分類器
from sklearn.model_selection import cross_val_score,GridSearchCV
from sklearn.svm import SVC
svm_model = SVC()
params = [
{'kernel': ['linear'], 'C': [1, 10, 100, 100]},
{'kernel': ['poly'], 'C': [1], 'degree': [2, 3]},
{'kernel': ['rbf'], 'C': [1, 10, 100, 100], 'gamma':[1, 0.1, 0.01, 0.001]}
]
best_model = GridSearchCV(svm_model, param_grid=params,cv = 5,scoring = 'accuracy')
best_model.fit(train_x,train_y)
best_model.best_score_
0.9714285714285714
best_model.best_params_
{'C': 1, 'kernel': 'linear'}
best_model.best_estimator_
best_model.cv_results_
注:
1、以前版本是best_model.grid_scores_,現(xiàn)在已經(jīng)移除
2、這個函數(shù)輸出很多數(shù)據(jù),不方便查看,一般不用

來源:https://zhuanlan.zhihu.com/p/88729124
下載1:OpenCV-Contrib擴展模塊中文版教程
在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。
下載2:Python視覺實戰(zhàn)項目52講 在「小白學(xué)視覺」公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。
下載3:OpenCV實戰(zhàn)項目20講 在「小白學(xué)視覺」公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~
評論
圖片
表情
