scikit-learn 的建模萬能模板!
↓推薦關(guān)注↓
-
明確你需要解決的問題是什么類型,以及知道解決該類型問題所對(duì)應(yīng)的算法。 -
從skicit-learn中調(diào)用相應(yīng)的算法構(gòu)建模型即可。是的!在機(jī)器學(xué)習(xí)領(lǐng)域,如果你只是抱著體驗(yàn)機(jī)器學(xué)習(xí)的心態(tài),實(shí)現(xiàn)起來就是這么簡(jiǎ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ù)集中均勻拆分出測(cè)試集。這里,簡(jiǎn)單把10%的數(shù)據(jù)集拿出來用作測(cè)試集。
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)建一個(gè)基本的算法模型
模板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('在測(cè)試集上的精確度: %.4f'%accuracy2)
在訓(xùn)練集上的精確度: 0.9810
在測(cè)試集上的精確度: 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 #評(píng)分函數(shù)用精確度評(píng)估
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('在測(cè)試集上的精確度: %.4f'%accuracy2)
在訓(xùn)練集上的精確度: 0.9429
在測(cè)試集上的精確度: 0.8889
3、構(gòu)建隨機(jī)森林分類模型
sklearn.ensemble.RandomForestClassifier 下,好了,現(xiàn)在你應(yīng)該可以自己寫了,這個(gè)作為本文的一個(gè)小測(cè)試,歡迎在評(píng)論區(qū)寫下你的答案。
萬能模板V2.0版
加入交叉驗(yàn)證,讓算法模型評(píng)估更加科學(xué)
cross_val_score() 這個(gè)函數(shù)里了,只需要調(diào)用該函數(shù)即可,不需要自己想什么拆分算法,也不用寫for循環(huán)進(jì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("測(cè)試集上的平均精確度: %0.2f (+/- %0.2f)" % (scores2.mean(), scores2.std() * 2))
print(scores1)
print(scores2)
訓(xùn)練集上的精確度: 0.97 (+/- 0.08)
測(cè)試集上的平均精確度: 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("測(cè)試集上的平均精確度: %0.2f (+/- %0.2f)" % (scores2.mean(), scores2.std() * 2))
print(scores1)
print(scores2)
訓(xùn)練集上的精確度: 0.94 (+/- 0.07)
測(cè)試集上的平均精確度: 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()方法來查看每個(gè)算法可以調(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)模型,可以利用這個(gè)模型進(jìn)行預(yù)測(cè)。
best_model 還有好多好用的屬性:
-
best_model.cv_results_:可以查看不同參數(shù)情況下的評(píng)價(jià)結(jié)果。 -
best_model.param_:得到該模型的最優(yōu)參數(shù) -
best_model.best_score_: 得到該模型的最后評(píng)分結(jié)果
模板3.0應(yīng)用案例
實(shí)現(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、這個(gè)函數(shù)輸出很多數(shù)據(jù),不方便查看,一般不用
來源:https://zhuanlan.zhihu.com/p/88729124
- EOF -
作者簡(jiǎn)介
城哥,公眾號(hào)9年博主,一線互聯(lián)網(wǎng)工作10年(目前在職)、公司校招和社招技術(shù)面試官,主導(dǎo)多個(gè)公司級(jí)實(shí)戰(zhàn)項(xiàng)目(數(shù)據(jù)分析挖掘、算法、AI平臺(tái)建設(shè)等)。
關(guān)注我,陪你一起成長(zhǎng),遇見更好的自己。
星球服務(wù)
加入知識(shí)星球,可以享受7大福利與服務(wù):免費(fèi)獲取海量技術(shù)資料、向我 1 對(duì) 1 技術(shù)咨詢、求職指導(dǎo),簡(jiǎn)歷優(yōu)化、歷史文章答疑(源碼+數(shù)據(jù))、綜合&專業(yè)技術(shù)交流社群、前沿技術(shù)分享(包含ChatGPT使用技巧)、定制專屬學(xué)習(xí)路線,幫你快速成長(zhǎng)、告別迷茫。
原創(chuàng)不易,技術(shù)學(xué)習(xí)資料如下,星球成員可免費(fèi)獲取,非星球成員,添加城哥微信:dkl88191,請(qǐng)城哥喝杯星巴克。
評(píng)論
圖片
表情





