欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python機器學習入門(六)之Python優(yōu)化模型

 更新時間:2021年08月27日 15:51:28   作者:靖墨c  
這篇文章主要介紹了Python機器學習入門知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

有時提升一個模型的準確度很困難。你會嘗試所有曾學習過的策略和算法,但模型正確率并沒有改善。這時你會覺得無助和困頓,這也正是90%的數(shù)據(jù)科學家開始放棄的時候。不過,這才是考驗真正本領的時候!這也是普通的數(shù)據(jù)科學家和大師級數(shù)據(jù)科學家的差距所在。

1.集成算法

三個臭皮匠,頂個諸葛亮。群體的智慧是很強大的。那么,在機器學習中能否同樣采用此策略呢?答案是肯定的,就是集成算法——將多個不同算法從集成起來,使結(jié)果更優(yōu)。

1.1袋裝算法

袋裝算法是一種提高分類準確率的算法。通過給定組合投票的方式獲得最優(yōu)解。比如你生病了,去n個醫(yī)院看了n個醫(yī)生,每個醫(yī)生都給你開了藥方,最后哪個藥方的出現(xiàn)次數(shù)多,就說明這個藥方可能是最優(yōu)解。

1.1.1袋裝決策樹

袋裝算法在數(shù)據(jù)具有很大方差時非常有效,最常見的例子就是決策樹的袋裝算法。

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
 
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds,shuffle=True,random_state=seed)
 
#袋裝決策樹
cart = DecisionTreeClassifier()
num_tree = 100
model = BaggingClassifier(base_estimator=cart,n_estimators=num_tree,random_state=seed)
result = cross_val_score(model, X, Y, cv=kfold)
print(result.mean())

0.7578263841421736

1.1.2隨機森林

隨機森林是由很多決策樹構(gòu)成的,不同決策樹之間沒有關(guān)聯(lián)。

當我們進行分類任務時,新的輸入樣本進入,就讓森林中的每一棵決策樹分別進行判斷和分類,每個決策樹會得到一個自己的分類結(jié)果,決策樹的分類結(jié)果中哪一個分類最多,那么隨機森林就會把這個結(jié)果當做最終的結(jié)果。

from sklearn.ensemble import RandomForestClassifier
 
#隨機森林
num_tree = 100
max_features = 3
model = RandomForestClassifier(n_estimators=num_tree,random_state=seed,max_features=max_features)
result = cross_val_score(model, X, Y, cv=kfold)
print(result.mean())

0.759107997265892

1.1.3極端隨機樹

極端隨機數(shù)與隨機森林十分相似,都是由許多決策樹構(gòu)成的,但它與隨機森林由兩個主要區(qū)別:

  • 隨機森林應用的是Bagging模型,而極端隨機樹是使用所有的訓練樣本得到每棵決策樹,也就是每棵決策樹應用的是全部訓練樣本。
  • 隨機森林是在一個隨機子集內(nèi)得到最優(yōu)分叉特征屬性,而極端隨機樹是完全隨機地選擇分叉特征屬性,從而實現(xiàn)對決策樹進行分叉。
from sklearn.ensemble import ExtraTreesClassifier
 
#極端隨機樹
num_tree = 100
max_features = 3
model = ExtraTreesClassifier(n_estimators=num_tree,random_state=seed,max_features=max_features)
result = cross_val_score(model, X, Y, cv=kfold)
print(result.mean())

0.7630211893369789

1.2提升算法

提升算法也稱為boosting算法,它是將弱學習算法提升為強學習算法的一類算法,可用來提升弱分類器的準確度。

1.2.1AdaBoost

AdaBoost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構(gòu)成一個更強的最終分類器(強分類器)。

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier
 
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds,shuffle=True,random_state=seed)
 
#AdaBost
num_tree = 100
model = AdaBoostClassifier(n_estimators=num_tree,random_state=seed)
result = cross_val_score(model, X, Y, cv=kfold)
print(result.mean())

0.7578605604921395

1.2.2隨機梯度提升

隨機梯度提升法(GBM)的基本思想是:要找到某個函數(shù)的最大值,最好的辦法就是沿著該函數(shù)的梯度方向探尋。梯度算子總是指向函數(shù)增長值最快的方向。

from sklearn.ensemble import GradientBoostingClassifier
 
#隨機 梯度提升
num_tree = 100
model = GradientBoostingClassifier(n_estimators=num_tree,random_state=seed)
result = cross_val_score(model, X, Y, cv=kfold)
print(result.mean())

0.7591934381408066

1.3投票算法

投票算法(Voting)是一個非常簡單的多個機器學習算法的集成算法。投票算法是通過創(chuàng)建兩個或多個算法模型,利用投票算法將這些算法包裝起來,計算各個子模型的平均預測情況。

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import VotingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
 
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds,shuffle=True,random_state=seed)
 
#投票算法
models=[]
model_logistic = LogisticRegression(max_iter=3000)
model_cart = DecisionTreeClassifier()
model_svc = SVC()
models.append(('logistic',model_logistic))
models.append(('cart',model_cart))
models.append(('svc',model_svc))
ensemble_model = VotingClassifier(estimators=models)
result = cross_val_score(ensemble_model, X, Y, cv=kfold)
print(result.mean())

0.7721804511278196

2.算法調(diào)參

機器學習的模型都是參數(shù)化的,可以通過調(diào)參來提高模型的準確度。模型參數(shù)的調(diào)整應該遵循偏差和方差協(xié)調(diào)的原則。

調(diào)整算法參數(shù)是機器學習解決問題的最后一個步驟,有時也被成為超參數(shù)優(yōu)化。學會調(diào)參是進行機器學習項目的前提。參數(shù)可分為兩種:一種是影響模型在訓練集上的準確度或防止過擬合能力的參數(shù);另一種是不影響這兩者的參數(shù)。模型在樣本總體上的準確度由其在訓練集上的準確度及其防止過擬合的能力共同決定,所以在調(diào)參時主要針對第一種參數(shù)進行調(diào)整,最終達到的效果是:模型在訓練集上的準確度和防止過擬合能力的大和諧。

2.1網(wǎng)絡搜索優(yōu)化參數(shù)

網(wǎng)格搜索優(yōu)化參數(shù)是一種算法參數(shù)優(yōu)化的方法。它是通過遍歷已定義參數(shù)的列表,來評估算法的參數(shù),從而找到最優(yōu)參數(shù)。

from pandas import read_csv
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
 
#導入數(shù)據(jù)
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
#將數(shù)據(jù)分為輸入數(shù)據(jù)和輸出結(jié)果
array = data.values
X = array[:,0:8]
Y = array[:,8]
#算法實例化
model = Ridge()
#設置要遍歷的參數(shù)
param_grid = {'alpha':[1,0.1,0.01,0.001,0]}
#通過網(wǎng)格搜索查詢最優(yōu)參數(shù)
grid = GridSearchCV(model, param_grid)
grid.fit(X,Y)
#搜索結(jié)果
print('max_score:%.3f'% grid.best_score_)
print('best_para:%.3f'% grid.best_estimator_.alpha)

max_score:0.276
best_para:1.000

2.2隨機搜索優(yōu)化參數(shù)

隨機搜索優(yōu)化參數(shù)是另一種對算法參數(shù)優(yōu)化的方法。隨機搜索優(yōu)化參數(shù)通過固定次數(shù)的迭代,采用隨機采樣分布的方式搜索合適的參數(shù)。

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform
 
#隨即搜索優(yōu)化參數(shù)
grid = RandomizedSearchCV(model, param_grid,100,random_state=7)
grid.fit(X,Y)
#搜索結(jié)果
print('max_score:%.3f'% grid.best_score_)
print('best_para:%.3f'% grid.best_estimator_.alpha)

max_score:0.276
best_para:1.000

總結(jié)

本文主要講解了如何優(yōu)化模型,包括集成算法和算法調(diào)參,這些都是在實際項目中非常有用的。

到此這篇關(guān)于Python機器學習入門(六)優(yōu)化模型的文章就介紹到這了,更多相關(guān)Python機器學習內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)SICP賦值和局部狀態(tài)

    Python實現(xiàn)SICP賦值和局部狀態(tài)

    這篇文章主要介紹了Python實現(xiàn)SICP 賦值和局部狀態(tài)的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 解決pytorch中的kl divergence計算問題

    解決pytorch中的kl divergence計算問題

    這篇文章主要介紹了解決pytorch中的kl divergence計算問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python坐標軸操作及設置代碼實例

    Python坐標軸操作及設置代碼實例

    這篇文章主要介紹了Python坐標軸操作及設置代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Numpy中的shape函數(shù)的用法詳解

    Numpy中的shape函數(shù)的用法詳解

    這篇文章主要介紹了Numpy中的shape函數(shù)的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python下調(diào)用Linux的Shell命令的方法

    Python下調(diào)用Linux的Shell命令的方法

    有時候難免需要直接調(diào)用Shell命令來完成一些比較簡單的操作,這篇文章主要介紹了Python下調(diào)用Linux的Shell命令的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • PyTorch中flatten()?函數(shù)的用法實例小結(jié)

    PyTorch中flatten()?函數(shù)的用法實例小結(jié)

    在PyTorch中,flatten函數(shù)的作用是將一個多維的張量轉(zhuǎn)換為一維的向量,它可以將任意形狀的張量轉(zhuǎn)換為一維,而不需要指定轉(zhuǎn)換后的大小,這篇文章主要介紹了PyTorch中flatten()?函數(shù)的用法,需要的朋友可以參考下
    2023-11-11
  • 淺談pandas中對nan空值的判斷和陷阱

    淺談pandas中對nan空值的判斷和陷阱

    這篇文章主要介紹了淺談pandas中對nan空值的判斷和陷阱,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 如何通過python的fabric包完成代碼上傳部署

    如何通過python的fabric包完成代碼上傳部署

    這篇文章主要介紹了如何通過python的fabric包完成代碼上傳部署,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python 安裝impala包步驟

    python 安裝impala包步驟

    這篇文章主要介紹了python 安裝impala包步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 解決Jupyter NoteBook輸出的圖表太小看不清問題

    解決Jupyter NoteBook輸出的圖表太小看不清問題

    這篇文章主要介紹了解決Jupyter NoteBook輸出的圖表太小看不清問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評論