最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python機(jī)器學(xué)習(xí)入門(mén)(四)之Python選擇模型

 更新時(shí)間:2021年08月27日 16:27:57   作者:靖墨c  
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)入門(mén)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.數(shù)據(jù)分離與驗(yàn)證

要知道算法模型對(duì)未知的數(shù)據(jù)表現(xiàn)如何,最好的評(píng)估辦法是利用已經(jīng)明確知道結(jié)果的數(shù)據(jù)運(yùn)行生成的算法模型進(jìn)行驗(yàn)證。此外還可以使用新的數(shù)據(jù)來(lái)評(píng)估算法模型。

在評(píng)估機(jī)器學(xué)習(xí)算法時(shí),不將訓(xùn)練集直接作為評(píng)估數(shù)據(jù)集最直接的原因就是過(guò)度擬合。過(guò)度擬合是指為了得到一致性假設(shè)而變得過(guò)度嚴(yán)格,簡(jiǎn)單來(lái)說(shuō)就是指模型僅對(duì)訓(xùn)練數(shù)據(jù)有較好的效果,而對(duì)于新數(shù)據(jù)則適應(yīng)性很差

如圖所示是一個(gè)分類實(shí)例,綠色曲線表示過(guò)擬合,黑色曲線表示正常模型。可以看到過(guò)擬合模型僅對(duì)當(dāng)前數(shù)據(jù)表現(xiàn)較好,而對(duì)新數(shù)據(jù)適應(yīng)性明顯不如正常模型。

接下來(lái)將講解四種不同的分離數(shù)據(jù)集的方法,用來(lái)分離訓(xùn)練集和評(píng)估集,并用其評(píng)估算法模型。

1.1分離訓(xùn)練數(shù)據(jù)集和評(píng)估數(shù)據(jù)集

可以簡(jiǎn)單地將原始數(shù)據(jù)集分為兩部分,第一部分用來(lái)訓(xùn)練算法生成模型,第二部分通過(guò)模型來(lái)預(yù)測(cè)結(jié)果,并于已知的結(jié)果進(jìn)行比較,來(lái)評(píng)估算法模型的準(zhǔn)確度。

from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import LeaveOneOut
from sklearn.model_selection import ShuffleSplit
 
 
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
# print(data.head(10))
array = data.values
X = array[:, 0:8]
Y = array[:, 8]
test_size = 0.33
seed = 4
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
model = LogisticRegression(max_iter=3000)
model.fit(X_train, Y_train)
result = model.score(X_test, Y_test)
print("算法評(píng)估結(jié)果:%3f%%" % (result * 100))

執(zhí)行后得到的結(jié)果約為80%。為了讓算法模型具有良好的可復(fù)用性,在指定了分離數(shù)據(jù)大小的同時(shí),還指定了隨機(jī)粒度(seed=4),將數(shù)據(jù)隨即進(jìn)行分離。通過(guò)指定隨機(jī)的粒度,可以確保每次執(zhí)行程序得到相同的結(jié)果,這有助于比較兩個(gè)不同的算法生成模型的結(jié)果。

算法評(píng)估結(jié)果:80.314961%

1.2K折交叉驗(yàn)證分離

K折交叉驗(yàn)證是將原始數(shù)據(jù)分成K組(一般是均分),將第一部分作為測(cè)試集,其余作為訓(xùn)練集,訓(xùn)練模型,計(jì)算模型在測(cè)試集上的準(zhǔn)確率,每次用不同部分作為測(cè)試集,重復(fù)上述步驟K次,最后將平均準(zhǔn)確率作為最終的模型準(zhǔn)確率。

# K折交叉驗(yàn)證分離
num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds, random_state=seed,shuffle=True)
model = LogisticRegression(max_iter=3000)
result = cross_val_score(model, X, Y, cv=kfold)
print("算法評(píng)估結(jié)果:%.3f%% (%.3f%%)" % (result.mean() * 100, result.std() * 100))

執(zhí)行后得到評(píng)估得分及標(biāo)準(zhǔn)方差。

算法評(píng)估結(jié)果:77.216% (4.968%)

1.3棄一交叉驗(yàn)證分離

相較于K折交叉驗(yàn)證分離,棄一交叉驗(yàn)證有顯著優(yōu)點(diǎn):

  • 每一回合中幾乎所有樣本你皆用于訓(xùn)練模型,因此最接近原始樣本的分布,這樣評(píng)估所得的結(jié)果比較可靠。
  • 實(shí)驗(yàn)過(guò)程中沒(méi)有隨機(jī)因素會(huì)影響實(shí)驗(yàn)數(shù)據(jù),確保實(shí)驗(yàn)過(guò)程可重復(fù)。

但棄一交叉驗(yàn)證計(jì)算成本高,當(dāng)原始數(shù)據(jù)樣本數(shù)量多時(shí),棄一交叉驗(yàn)證需要花費(fèi)大量時(shí)間完成評(píng)估。

# 棄一交叉驗(yàn)證分離
# 計(jì)算量非常大!!
loocv = LeaveOneOut()
model = LogisticRegression(max_iter=3000)
result = cross_val_score(model,X,Y,cv = loocv)
print("算法評(píng)估結(jié)果:%.3f%% (%.3f%%)"% (result.mean()*100,result.std()*100))

運(yùn)算得出的標(biāo)準(zhǔn)方差與K折交叉驗(yàn)證有較大差距。

算法評(píng)估結(jié)果:77.604% (41.689%)

1.4重復(fù)隨機(jī)分離評(píng)估數(shù)據(jù)集與訓(xùn)練數(shù)據(jù)集

另外一種K折交叉驗(yàn)證的用途是隨即分離數(shù)據(jù)為訓(xùn)練數(shù)據(jù)集和評(píng)估數(shù)據(jù)集。

n_splits = 10
test_size = 0.33
seed = 7
kfold = ShuffleSplit(n_splits=n_splits, test_size=test_size, random_state=seed)
model = LogisticRegression(max_iter=3000)
result = cross_val_score(model, X, Y, cv=kfold)
print("算法評(píng)估結(jié)果:%.3f%% (%.3f%%)" % (result.mean() * 100, result.std() * 100))

算法評(píng)估結(jié)果:76.535% (2.235%)

2.算法評(píng)估

2.1分類算法評(píng)估

2.1.1分類準(zhǔn)確度

分類準(zhǔn)確度就是算法自動(dòng)分類正確的樣本數(shù)除以所有的樣本數(shù)得出的結(jié)果。準(zhǔn)確度是一個(gè)很好、很直觀的評(píng)價(jià)指標(biāo),但是有時(shí)候準(zhǔn)確度高并不代表算法就一定好。

from pandas import read_csv
import pandas as pd
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
 
#分類準(zhǔn)確度
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename,names=names)
#print(data.head(10))
#將數(shù)據(jù)分為輸入數(shù)據(jù)和輸出結(jié)果
array = data.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds,random_state=seed,shuffle=True)
model = LogisticRegression(max_iter=3000)
result = cross_val_score(model, X,Y,cv=kfold)
print("算法評(píng)估結(jié)果準(zhǔn)確度:%.3f(%.3f)" % (result.mean(),result.std()))

算法評(píng)估結(jié)果準(zhǔn)確度:0.772(0.050)

2.1.2分類報(bào)告

在scikit-learn中提供了一個(gè)非常方便的工具,可以給出對(duì)分類問(wèn)題的評(píng)估報(bào)告,Classification__report()方法能夠給出precision,recall,F1-score,support。

from pandas import read_csv
import pandas as pd
from sklearn.model_selection import KFold
from sklearn.metrics import classification_report
 
#分類準(zhǔn)確度
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename,names=names)
print(data.head(10))
#將數(shù)據(jù)分為輸入數(shù)據(jù)和輸出結(jié)果
array = data.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds,random_state=seed,shuffle=True)
model = LogisticRegression(max_iter=3000)
model.fit(X_train,Y_train)
predicted = model.predict(X_test)
report = classification_report(Y_test, predicted)
print(report)

precision recall f1-score support
0.0 0.84 0.87 0.86 171
1.0 0.71 0.66 0.69 83
accuracy 0.80 254
macro avg 0.78 0.77 0.77 254
weighted avg 0.80 0.80 0.80 254

2.2回歸算法評(píng)估

回歸算法評(píng)估將使用波士頓房?jī)r(jià)(Boston House Price)數(shù)據(jù)集??赏ㄟ^(guò)百度網(wǎng)盤(pán)下載

鏈接:https://pan.baidu.com/s/1uyDiXDC-ixfBIYmTU9rrAQ
提取碼:eplz

2.2.1平均絕對(duì)誤差

平均絕對(duì)誤差是所有單個(gè)觀測(cè)值與算術(shù)平均值偏差絕對(duì)值的平均值。平均絕對(duì)誤差相比于平均誤差能更好地反映預(yù)測(cè)值誤差的實(shí)際情況。

cross_val_score中的scoring參數(shù)詳解可見(jiàn)官方開(kāi)發(fā)文檔

https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression
 
filename = 'housing.csv'
names = ['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PRTATIO','B','LSTAT','MEDV']
data = read_csv(filename,names=names,delim_whitespace=True)
array = data.values
X = array[:,0:13]
Y = array[:,13]
n_splits = 10
seed = 7
kfold = KFold(n_splits=n_splits,random_state=seed,shuffle=True)
model = LinearRegression()
 
#平均絕對(duì)誤差
scoring = 'neg_mean_absolute_error'
result = cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print('MAE:%.3f(%.3f)'%  (result.mean(),result.std()))

MAE:-3.387(0.667)

2.2.2均方誤差

均方誤差是衡量平均誤差的方法,可以評(píng)價(jià)數(shù)據(jù)的變化程度。均方根誤差是均方誤差的算術(shù)平均跟。均方誤差越小,說(shuō)明用該預(yù)測(cè)模型描述實(shí)驗(yàn)數(shù)據(jù)準(zhǔn)確度越高。

#均方誤差
scoring = 'neg_mean_squared_error'
result = cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print('MSE:%.3f(%.3f)'%  (result.mean(),result.std()))

MSE:-23.747(11.143)

2.2.3判定系數(shù)(R^2

判定系數(shù)(coefficient of determination),也叫可決系數(shù)或決定系數(shù),是指在線性回歸中,回歸平方和與總離差平方和之比值,其數(shù)值等于相關(guān)系數(shù)的平方。

#決定系數(shù)
scoring = 'r2'
result = cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print('R2:%.3f(%.3f)'%  (result.mean(),result.std()))

R2:0.718(0.099)

K折交叉驗(yàn)證是用來(lái)評(píng)估機(jī)器學(xué)習(xí)算法的黃金準(zhǔn)則。黃金準(zhǔn)則為:當(dāng)不知如何選擇分離數(shù)據(jù)集的方法時(shí),選擇K折交叉驗(yàn)證來(lái)分離數(shù)據(jù)集;當(dāng)不知如何設(shè)定K值時(shí),將K設(shè)為10。

到此這篇關(guān)于Python機(jī)器學(xué)習(xí)入門(mén)(四)選擇模型的文章就介紹到這了,更多相關(guān)Python機(jī)器學(xué)習(xí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談tensorflow中張量的提取值和賦值

    淺談tensorflow中張量的提取值和賦值

    今天小編就為大家分享一篇淺談tensorflow中張量的提取值和賦值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python scipy.spatial.distance 距離計(jì)算函數(shù) ?

    python scipy.spatial.distance 距離計(jì)算函數(shù) ?

    本文主要介紹了python scipy.spatial.distance 距離計(jì)算函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 如何利用python實(shí)現(xiàn)Simhash算法

    如何利用python實(shí)現(xiàn)Simhash算法

    這篇文章主要介紹了如何利用python實(shí)現(xiàn)Simhash算法,文章基于python的相關(guān)資料展開(kāi)Simhash算法的詳細(xì)介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • 層次分析法在matlab上的實(shí)現(xiàn)方式

    層次分析法在matlab上的實(shí)現(xiàn)方式

    這篇文章主要介紹了層次分析法在matlab上的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python應(yīng)用實(shí)現(xiàn)處理excel數(shù)據(jù)過(guò)程解析

    Python應(yīng)用實(shí)現(xiàn)處理excel數(shù)據(jù)過(guò)程解析

    這篇文章主要介紹了Python應(yīng)用實(shí)現(xiàn)處理excel數(shù)據(jù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 手把手教你YOLOv5如何進(jìn)行區(qū)域目標(biāo)檢測(cè)

    手把手教你YOLOv5如何進(jìn)行區(qū)域目標(biāo)檢測(cè)

    YOLOV5和YOLOV4有很多相同的地方,最大的改變還是基礎(chǔ)架構(gòu)的變化,下面這篇文章主要給大家介紹了關(guān)于YOLOv5如何進(jìn)行區(qū)域目標(biāo)檢測(cè)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • python 圖像判斷,清晰度(明暗),彩色與黑白實(shí)例

    python 圖像判斷,清晰度(明暗),彩色與黑白實(shí)例

    這篇文章主要介紹了python 圖像判斷,清晰度(明暗),彩色與黑白實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • pytorch 實(shí)現(xiàn)cross entropy損失函數(shù)計(jì)算方式

    pytorch 實(shí)現(xiàn)cross entropy損失函數(shù)計(jì)算方式

    今天小編就為大家分享一篇pytorch 實(shí)現(xiàn)cross entropy損失函數(shù)計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python中Selenium模塊的使用詳解

    Python中Selenium模塊的使用詳解

    這篇文章主要介紹了Python中Selenium模塊的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python爬蟲(chóng)eval實(shí)現(xiàn)看漫畫(huà)漫畫(huà)柜mhgui實(shí)戰(zhàn)分析

    Python爬蟲(chóng)eval實(shí)現(xiàn)看漫畫(huà)漫畫(huà)柜mhgui實(shí)戰(zhàn)分析

    這篇文章主要為大家介紹了Python爬蟲(chóng)eval實(shí)現(xiàn)看漫畫(huà)漫畫(huà)柜mhgui實(shí)戰(zhàn)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論

鄂托克前旗| 香港| 湘潭县| 嘉善县| 通州区| 绩溪县| 金昌市| 德令哈市| 准格尔旗| 建平县| 遵化市| 偏关县| 安达市| 大名县| 临猗县| 广宗县| 奎屯市| 申扎县| 开平市| 成武县| 衡山县| 肥乡县| 甘孜县| 许昌县| 阳高县| 江达县| 霍邱县| 甘肃省| 梅河口市| 潼关县| 唐河县| 肃宁县| 忻州市| 阜城县| 积石山| 新乡县| 西畴县| 桂东县| 陇西县| 华宁县| 娄烦县|