編者按:Udacity機(jī)器學(xué)習(xí)、深度學(xué)習(xí)導(dǎo)師Ashwin Hariharan以預(yù)測葡萄酒品質(zhì)作為例子,帶你步入機(jī)器學(xué)習(xí)的大門。
機(jī)器學(xué)習(xí)(ML)是人工智能的一個子領(lǐng)域。它賦予計算機(jī)學(xué)習(xí)的能力,而無需顯式地編程。從搜索趨勢來看,這幾年機(jī)器學(xué)習(xí)的流行度和需求明顯上漲。
這篇機(jī)器學(xué)習(xí)入門教程是我寫的上一篇數(shù)據(jù)科學(xué)教程的姊妹篇。上一篇展示了如何使用數(shù)據(jù)科學(xué)來理解葡萄酒的屬性。如果你還沒有讀過上一篇,推薦首先閱讀一下,你將了解數(shù)據(jù)科學(xué)大概是怎么回事。
什么是機(jī)器學(xué)習(xí)?
人類通過過往的經(jīng)驗學(xué)習(xí)。利用眼、耳、觸等感官輸入從周圍獲得數(shù)據(jù)。我們接著以許多有趣、有意義的方式使用這些數(shù)據(jù)。最常見的,我們使用它對未來做出精確的預(yù)測。換句話說,我們學(xué)習(xí)。
例如,今年的這個時候會下雨嗎?如果你忘記了女友的生日,她會發(fā)瘋嗎?紅燈時應(yīng)該停下嗎?你應(yīng)該投資某處不動產(chǎn)嗎?Jon Snow在《權(quán)力的游戲》的下一季存活的概率?為了回答這些問題,你需要過去的數(shù)據(jù)。
另一方面,傳統(tǒng)上計算機(jī)不像我們一樣使用數(shù)據(jù)。它們需要一組明確的指令(算法)以供遵循。
現(xiàn)在問題來了——計算機(jī)可以像人類一樣從過去的經(jīng)驗(數(shù)據(jù))中學(xué)習(xí)嗎?是的——你可以賦予它們學(xué)習(xí)和預(yù)測未來事件的能力,而無需顯式地編程。從自動駕駛到搜索行星,機(jī)器學(xué)習(xí)的應(yīng)用場景廣闊無垠。
另外,我讀過一篇很棒的解釋數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、人工智能區(qū)別的文章。這是一篇比較詳盡全面的文章,所以我在這里總結(jié)一下:
數(shù)據(jù)科學(xué)產(chǎn)生洞見
機(jī)器學(xué)習(xí)產(chǎn)生預(yù)測
人工智能產(chǎn)生行動
這些領(lǐng)域間有許多交叉重疊,因此這些術(shù)語經(jīng)常被不加區(qū)別地使用。
融資時,是AI。招聘時,是ML。實現(xiàn)時,是線性回歸。調(diào)試時,是printf()
在Netflix,機(jī)器學(xué)習(xí)用來從用戶的行為數(shù)據(jù)中學(xué)習(xí),顯示推薦。Google搜索顯示和你有關(guān)的結(jié)果——同樣,這需要使用很多ML技術(shù)不斷學(xué)習(xí)場景背后的數(shù)據(jù)。在數(shù)據(jù)科學(xué)和ML地帶,數(shù)據(jù)就是黃金。如果Tyrion Lannister面對ML和AI的世界,他可能會說:
一家公司需要數(shù)據(jù),就像劍需要磨刀石才能保持鋒利。
現(xiàn)在我們理解了什么是機(jī)器學(xué)習(xí),是時候深入了。
誰應(yīng)該閱讀這篇教程:
如果你想要入門機(jī)器學(xué)習(xí),卻因為發(fā)現(xiàn)數(shù)學(xué),統(tǒng)計學(xué),從頭實現(xiàn)算法太復(fù)雜,本文很適合你。
在你學(xué)習(xí)的某個階段,你將需要進(jìn)一步深入——你不可能總是回避數(shù)學(xué)!我希望你讀完本文后,能有動機(jī)探索這一領(lǐng)域各個深度的問題。
如果你有Python編程基礎(chǔ),并閱讀過上一篇文章,你可以開始了。
讓我們開始!
我們將學(xué)習(xí)構(gòu)建一個基于葡萄酒屬性預(yù)測葡萄酒品質(zhì)的機(jī)器學(xué)習(xí)模型。讀完本文后,你將理解:
不同的ML算法和技術(shù)
如何訓(xùn)練和創(chuàng)建分類器
構(gòu)建ML模型的常見錯誤,以及如何擺脫它們
如何分析和解釋模型的表現(xiàn)
機(jī)器學(xué)習(xí)類型
監(jiān)督學(xué)習(xí)(本教程將討論這一主題)
顧名思義,監(jiān)督學(xué)習(xí)需要人類來“監(jiān)督”,告訴計算機(jī)正確答案。我們傳入包含許多特征的訓(xùn)練數(shù)據(jù),并給出正確答案。
為了類比,想象計算機(jī)是一個如同一張白紙的小孩。他什么也不知道。
現(xiàn)在,你如何教會Jon Snow貓和狗的區(qū)別?答案很直觀——你帶它出去散步,當(dāng)你看到一只貓時,你指著貓說:“這是貓。”你繼續(xù)走,可能會看到一條狗,所以你指著狗說:“這是狗。”隨著時間的推移,你不斷展示狗和貓,小孩會學(xué)習(xí)兩者的區(qū)別。
當(dāng)然,你總是可以給Jon看很多貓狗圖片,而不用外出散步。Instagram是你的救星!:P
就我們的葡萄酒數(shù)據(jù)集而言,我們的機(jī)器學(xué)習(xí)模型將學(xué)習(xí)葡萄酒的品質(zhì)(quality)和剩余屬性的關(guān)系。換句話說,它將學(xué)習(xí)識別特征和目標(biāo)(品質(zhì))間的模式。
無監(jiān)督學(xué)習(xí)
這里我們不給計算機(jī)需要預(yù)測的“目標(biāo)”標(biāo)簽。相反,我們讓計算機(jī)自行發(fā)現(xiàn)模式,接著選擇最說得通的模式。這一技術(shù)很有必要,因為經(jīng)常我們甚至不知道要在數(shù)據(jù)中找出什么。
強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)用來訓(xùn)練智能體的“表現(xiàn)”,以及學(xué)習(xí)給定場景下的最佳行動,基于獎勵和反饋。這和AI有很多交叉。
除此之外,還有其他類型的ML,比如半監(jiān)督學(xué)習(xí)、聚類。
監(jiān)督學(xué)習(xí)可以解決什么問題?
總體來說,監(jiān)督學(xué)習(xí)用于解決兩類問題:
圖片來源:aldro61.github.io
分類:當(dāng)你需要將特定觀測歸類為一組。在上圖中,給定一個數(shù)據(jù)點(diǎn),你需要分類它是藍(lán)點(diǎn)還是紅點(diǎn)。其他例子包括,識別垃圾郵件,分配資訊的類別——比如運(yùn)動、天氣、科學(xué)。
回歸:用于預(yù)測連續(xù)值。例如,預(yù)測不動產(chǎn)價格。
注意,分類問題不一定是二元的——我們可以有兩個分類以上的問題。
另一方面,判定癌癥患者的期望壽命會是一個回歸問題。在這一情形下,我們的模型將需要找到一條能夠很好地概括大多數(shù)數(shù)據(jù)點(diǎn)的直線或曲線。
一些回歸問題也可以被轉(zhuǎn)換為分類問題。此外,某些特定種類的問題可能既是分類問題,又是回歸問題。
機(jī)器學(xué)習(xí)的機(jī)制
大部分監(jiān)督學(xué)習(xí)問題分為三步:
第一步:預(yù)處理、轉(zhuǎn)換、分割數(shù)據(jù)
第一步是分析數(shù)據(jù),并為訓(xùn)練作準(zhǔn)備。我們觀察數(shù)據(jù)的傾向性、分布、特征的平均數(shù)和中位數(shù)等統(tǒng)計數(shù)據(jù)。上一篇教程介紹了這些。
之后我們可以預(yù)處理數(shù)據(jù),并在必要時應(yīng)用特征轉(zhuǎn)換。
接著,我們將數(shù)據(jù)分為兩部分——較大的一部分用作訓(xùn)練,較小的一部分用作測試。分類器將使用訓(xùn)練數(shù)據(jù)集進(jìn)行“學(xué)習(xí)”。我們需要單獨(dú)的數(shù)據(jù)來測試和驗證,這樣我們可以看到我們的模型在未見數(shù)據(jù)上工作得有多好。
第二步:訓(xùn)練
接著我們創(chuàng)建模型。我們通過創(chuàng)建函數(shù)或“模型”,并使用數(shù)據(jù)訓(xùn)練它做到這一點(diǎn)。函數(shù)將使用我們選擇的算法,使用我們的數(shù)據(jù)訓(xùn)練自身,并理解模式(也就是學(xué)習(xí))。注意,分類器表現(xiàn)得多好取決于它的老師——我們需要以正確的方式訓(xùn)練它。
憂心忡忡的父母:如果你所有的朋友跳橋了,你會跟隨他們嗎?機(jī)器學(xué)習(xí)算法:會。
第三步:測試和驗證
訓(xùn)練好模型后,我們可以給它新的未見數(shù)據(jù),而模型將給出輸出或預(yù)測。
第四步:超參數(shù)調(diào)整
最后,我們將嘗試改善算法的表現(xiàn)。
現(xiàn)在,在我們深入機(jī)器學(xué)習(xí)算法之前,讓我們了解下分類或回歸問題中可能出現(xiàn)的誤差。
偏離導(dǎo)致的誤差——精確度和欠擬合
當(dāng)模型具有足夠多的數(shù)據(jù)但復(fù)雜度不足以捕捉其中的關(guān)系時,偏離出現(xiàn)了。模型持續(xù)、系統(tǒng)地錯誤表示數(shù)據(jù),導(dǎo)致預(yù)測的低精確度。這被稱為欠擬合。
簡單而言,當(dāng)我們擁有一個貧乏的模型時,偏離出現(xiàn)了。例如,當(dāng)我們試圖基于《權(quán)力的游戲》角色的身高和服飾識別他們是貴族還是農(nóng)夫時,如果我們的模型只能根據(jù)身高劃分和分類角色,那么它會把Tyrion Lannister(矮人)標(biāo)記為農(nóng)夫——這大錯特錯!
另一個例子,當(dāng)我們想要通過顏色和形狀分類目標(biāo)(例如復(fù)活節(jié)彩蛋)時,如果我們的模型只能根據(jù)顏色劃分和分類目標(biāo),它將持續(xù)地錯誤標(biāo)記未來的目標(biāo)——例如將五顏六色的彩虹標(biāo)記為復(fù)活節(jié)彩蛋。
就我們的葡萄酒數(shù)據(jù)集而言,如果我們的機(jī)器學(xué)習(xí)分類器只“喝”一種葡萄酒,它會欠擬合。:P
另一個例子是本質(zhì)上為多項式的連續(xù)數(shù)據(jù),而模型只能表示線性關(guān)系。在這一情形下,我們傳給模型再多的數(shù)據(jù)也無濟(jì)于事,因為模型無法表示內(nèi)在的關(guān)系。為了克服偏離導(dǎo)致的誤差,我們需要更復(fù)雜的模型。
方差導(dǎo)致的誤差——準(zhǔn)確率和欠擬合
方差是衡量模型對訓(xùn)練數(shù)據(jù)的子集有多“敏感”的測度。
訓(xùn)練模型時,我們通常使用有限數(shù)量的樣本。如果我們使用隨機(jī)選擇的數(shù)據(jù)子集反復(fù)訓(xùn)練模型,我們會期望它的預(yù)測會因為特定樣本的不同而不同。
出現(xiàn)一些方差是正常的,但過多方差意味著模型無法將其預(yù)測推廣到更大的數(shù)據(jù)集。在這一場景下,模型在已見數(shù)據(jù)上表現(xiàn)得很精確,但在未見數(shù)據(jù)點(diǎn)上表現(xiàn)得很糟糕。對訓(xùn)練集高度敏感也稱為過擬合,一般在模型過于復(fù)雜時出現(xiàn)。
通常我們可以通過訓(xùn)練更多數(shù)據(jù)降低模型預(yù)測的方差,提升預(yù)測的準(zhǔn)確率。如果無法獲得更多數(shù)據(jù),我們也可以通過限制模型的復(fù)雜度控制方差。
對于程序員而言,挑戰(zhàn)在于使用能夠解決問題的最優(yōu)算法,避免高偏離或高方差,因為:
增加偏離將減少方差
增加方差將減少偏離
這通常被稱為偏離和方差的折衷。關(guān)于這點(diǎn)的細(xì)節(jié),可以參考scott.fortmann-roe.com/docs/BiasVariance.html
和傳統(tǒng)編程不同,當(dāng)你試圖找到機(jī)器學(xué)習(xí)和深度學(xué)習(xí)問題的最佳模型時,常常需要涉及大量基于試錯的方法。
現(xiàn)在,你需要對可以用來訓(xùn)練模型的一些算法有個概念。我不會深入數(shù)學(xué)或底層的實現(xiàn)細(xì)節(jié),但應(yīng)該足以讓你觀其大略。
一些最常用的機(jī)器學(xué)習(xí)算法:
1. 高斯樸素貝葉斯
這個方法在20世紀(jì)50年代就出現(xiàn)了。它屬于概率分類器或條件概率算法家族,假定特征之間相互獨(dú)立。對識別垃圾郵件和分類資訊之類的分類問題而言,樸素貝葉斯很有效。
2. 決策樹
基本上這是一個類樹的數(shù)據(jù)結(jié)構(gòu),作用和流程圖差不多。決策樹是一種使用類樹的數(shù)據(jù)結(jié)構(gòu)建模決策和可能結(jié)果的分類算法。算法工作的方式是:
將數(shù)據(jù)集的最佳屬性作為樹的根節(jié)點(diǎn)。
節(jié)點(diǎn),或者說分岔處,經(jīng)常被稱為“決策節(jié)點(diǎn)”。它通常表示一個測試或條件(比如是多云還是晴天)。
分岔表示每個決策的輸出。
葉節(jié)點(diǎn)表示最終輸出,即標(biāo)簽(在分類問題中),或離散值(在回歸問題中)。
3. 隨機(jī)森林
單獨(dú)使用時,決策樹傾向于過擬合。而隨機(jī)森林有助于糾正可能出現(xiàn)的過擬合。隨機(jī)森林使用多棵決策樹——使用大量不同的決策樹(預(yù)測不同),結(jié)合這些樹的結(jié)果以得到最終輸出。
隨機(jī)森林使用一種稱為bagging的集成算法,這種算法有助于減少方差和過擬合。
給定訓(xùn)練集X = x1, …, xn,相應(yīng)標(biāo)簽/輸出Y = y1, …, yn,bagging反復(fù)(B次)選擇訓(xùn)練集中的一個隨機(jī)樣本(有放回)。
基于這些樣本訓(xùn)練決策樹。
通過分類樹的多數(shù)投票做出最終分類。
除此之外,還有其他機(jī)器學(xué)習(xí)算法,比如支持向量機(jī),集成方法和很多非監(jiān)督學(xué)習(xí)方法。
現(xiàn)在,是時候開始我們的訓(xùn)練了!
首先,我們需要預(yù)備我們的數(shù)據(jù)
在機(jī)器學(xué)習(xí)的游戲中,你回歸,或者你分類
在這篇教程中,我們將把回歸問題轉(zhuǎn)換為分類問題。所有評分低于5分的葡萄酒分類為0(差),評分為5分或6分的葡萄酒分類為1(一般),7分以上的葡萄酒分類為2(好)。
# 定義類別的分割點(diǎn)。
bins = [1,4,6,10]
# 定義類別
quality_labels=[0,1,2]
data['quality_categorical'] = pd.cut(data['quality'], bins=bins, labels=quality_labels, include_lowest=True)
# 顯示頭兩行
display(data.head(n=2))
# 分離數(shù)據(jù)為特征和目標(biāo)標(biāo)簽
quality_raw = data['quality_categorical']
features_raw = data.drop(['quality', 'quality_categorical'], axis = 1)
如你所見,我們有了一個新的列quality_categorical(品質(zhì)類別),基于之前選擇的區(qū)間分類品質(zhì)評分。quality_categorical列將作為目標(biāo)值,而其他列作為特征。
接著,創(chuàng)建數(shù)據(jù)的訓(xùn)練子集和測試子集:
from sklearn.model_selection import train_test_split
# 將數(shù)據(jù)分為訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(features_raw,
quality_raw,
test_size = 0.2,
random_state = 0)
# 顯示分離的結(jié)果
print("Training set has {} samples.".format(X_train.shape[0]))
print("Testing set has {} samples.".format(X_test.shape[0]))
Trainingset has 1279 samples.
Testingset has 320 samples.
在上面的代碼中,我們使用了sklearn的train_test_split方法。該方法接受特征數(shù)據(jù)(X)和目標(biāo)標(biāo)簽(y)作為輸入。它打亂數(shù)據(jù)集,并將其分為兩部分——80%用于訓(xùn)練,剩余20%用于測試。
接著,我們將使用一種算法訓(xùn)練,并評估其表現(xiàn)
我們需要一個函數(shù),接受我們選擇的算法、訓(xùn)練數(shù)據(jù)集、測試數(shù)據(jù)集。函數(shù)將運(yùn)行訓(xùn)練,接著使用一些表現(xiàn)測度評估算法的表現(xiàn)。
最終我們編寫了一個可以使用任意3種選定的算法的函數(shù),并為每種算法進(jìn)行訓(xùn)練。然后匯總結(jié)果,并加以可視化。
# 從sklearn導(dǎo)入任意3種監(jiān)督學(xué)習(xí)分類模型
from sklearn.naive_bayes importGaussianNB
from sklearn.tree importDecisionTreeClassifier
from sklearn.ensemble importRandomForestClassifier
#from sklearn.linear_model import LogisticRegression
# 初始化3個模型
clf_A = GaussianNB()
clf_B = DecisionTreeClassifier(max_depth=None, random_state=None)
clf_C = RandomForestClassifier(max_depth=None, random_state=None)
# 計算訓(xùn)練集1%、10%、100%樣本數(shù)目
samples_100 = len(y_train)
samples_10 = int(len(y_train)*10/100)
samples_1 = int(len(y_train)*1/100)
# 收集結(jié)果
results = {}
for clf in [clf_A, clf_B, clf_C]:
clf_name = clf.__class__.__name__
results[clf_name] = {}
for i, samples in enumerate([samples_1, samples_10, samples_100]):
results[clf_name][i] =
train_predict_evaluate(clf, samples, X_train, y_train, X_test, y_test)
#print(results)
# 可視化選定的3種學(xué)習(xí)模型的測度
vs.visualize_classification_performance(results)
輸出將類似:
上圖第一行為訓(xùn)練數(shù)據(jù)上的表現(xiàn),第二行為測試數(shù)據(jù)上的表現(xiàn)。這些表現(xiàn)測度意味著什么?請繼續(xù)閱讀……
分類問題的表現(xiàn)測度
精確度
最簡單也最常用的測度,正確預(yù)測除以數(shù)據(jù)點(diǎn)總數(shù)。
何時精確度不是一個良好的表現(xiàn)指標(biāo)?
有時,數(shù)據(jù)集中的類別分布會有很嚴(yán)重的傾向性,也就是說,某些分類有很多數(shù)據(jù)點(diǎn),而另一些分類的數(shù)據(jù)點(diǎn)要少得多。讓我們看一個例子。
在一個由100封郵件組成的數(shù)據(jù)集中,10封是垃圾郵件,其他90封不是。這意味者數(shù)據(jù)集有傾向性,并不是均勻分布的。
現(xiàn)在,想象一下,我們訓(xùn)練一個預(yù)測是否是垃圾郵件的分類器。它的表現(xiàn)是90%精確率。聽起來很不錯?并非如此。
分類器可以標(biāo)記或預(yù)測所有100封郵件為“非垃圾郵件”,而仍然能得到90%的精確度!但這個分類器完全無用,因為它把所有郵件都分類為非垃圾郵件。
所以,精確度并不總是一個良好的指標(biāo)。在特定情況下,其他測度能幫助我們更好地評估模型:
準(zhǔn)確率
準(zhǔn)確率告訴我們,分類為垃圾郵件的郵件中有多少確實是垃圾郵件,即真陽性/(真陽性 + 假陽性)
召回
召回或靈敏度告訴我們確實是垃圾郵件的郵件中有多少被分類為垃圾郵件,即真陽性/(真陽性 + 假陰性)
我們之前提到的具有90%精確度的分類器,它的準(zhǔn)確率和召回是多少呢?讓我們算一下——它的真陽性是0,假陽性是0,假陰性是10。根據(jù)前面提到的公式,我們的分類器的準(zhǔn)確率和召回均為0——相當(dāng)反常的評分!現(xiàn)在看起來不那么好了,不是嗎?
F1評分
F1為準(zhǔn)確率(precision)和召回(recall)的調(diào)和平均數(shù):
就F1而言,β = 1. 上式是F評分的公式,β值越大,越強(qiáng)調(diào)準(zhǔn)確率。
現(xiàn)在,讓我們回顧下我們的ML算法的表現(xiàn):
這些結(jié)果表明,高斯樸素貝葉斯的表現(xiàn)不像決策樹和隨機(jī)森林那么好。
你覺得為什么高斯樸素貝葉斯的表現(xiàn)不佳?(提示:你可以往上滾動,重新閱讀高斯樸素貝葉斯的解釋!)
特征重要性
scikit-learn提供的一些分類算法,有一個特征重要性屬性,可以讓你查看基于選定算法的每個特征的重要性。
比如,scikit-learn中的隨機(jī)森林分類器帶.feature_importance_:
# 導(dǎo)入一個帶`.feature_importance_`的模型
model = RandomForestClassifier(max_depth=None, random_state=None)
# 訓(xùn)練模型
model = model.fit(X_train, y_train)
# 提取特征重要性
importances = model.feature_importances_
print(X_train.columns)
print(importances)
# 繪圖
vs.feature_plot(importances, X_train, y_train)
結(jié)果如下:
上圖顯示了5個最重要的特征。酒精含量和揮發(fā)性酸水平看起來是最具影響力的因子,接著是硫酸鹽、檸檬酸、固定酸度。
超參數(shù)調(diào)整和優(yōu)化
你也許已經(jīng)注意到了,機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)有關(guān)。像任何科學(xué)一樣,它從一些先驗觀測開始。接著你做出假說,運(yùn)行一些試驗,然后分析它們多大程度上重現(xiàn)了之前的觀測。這被稱為科學(xué)方法,其實這和工程過程也很相似。
假說可以被認(rèn)為是“假定”。創(chuàng)建分類器的時候,我們首先假設(shè)一些算法,在我們看來,這些算法的效果應(yīng)該不錯。但我們的假說也可能不對。常常,我們需要調(diào)整我們的假說,看看它們能不能做得更好。
當(dāng)選擇機(jī)器學(xué)習(xí)模型時,我們做了一些關(guān)于它們的超參數(shù)的假定。超參數(shù)是特殊類型的配置變量,其值無法通過數(shù)據(jù)集直接計算。數(shù)據(jù)科學(xué)家或機(jī)器學(xué)習(xí)工程師需要通過試驗找出這些超參數(shù)的最佳值。這一過程稱為超參數(shù)調(diào)整。
現(xiàn)在,就隨機(jī)森林算法而言,哪些可能是它的超參數(shù)?
森林中決策樹的數(shù)目
尋找樹的最佳分岔時考慮的特征數(shù)
樹的最大深度,即根節(jié)點(diǎn)至葉節(jié)點(diǎn)的最長路徑
就這些超參數(shù)而言,我們的隨機(jī)森林分類器使用scikit-learn的默認(rèn)值。
scikit-learn提供了一個非常方便的API,讓我們可以在“網(wǎng)格”中指定超參數(shù)的不同值,然后通過scikit-learn的GridSearchCV API使用這些超參數(shù)的可能組合訓(xùn)練并進(jìn)行交叉驗證,給出最優(yōu)配置。這樣我們就不用手工運(yùn)行這么多迭代。
from sklearn.model_selection importGridSearchCV
from sklean.metrics import make_scorer
clf = RandomForestClassifier(max_depth=None, random_state=None)
# 創(chuàng)建打算調(diào)整的參數(shù)列表,有必要時使用字典。
"""
n_estimators: 森林中的決策樹數(shù)量
max_features: 尋找最佳分割時考慮的特征數(shù)量
max_depth: 樹的最大深度
"""
parameters = {'n_estimators': [10, 20, 30], 'max_features': [3, 4, 5, None], 'max_depth': [5, 6, 7, None]}
# 創(chuàng)建F0.5評分
scorer = make_scorer(fbeta_score, bate=0.5, average="micor")
# 進(jìn)行網(wǎng)格搜索
grid_obj = GridSearchCV(clf, parameters, scoring=scorer)
# 找到最優(yōu)參數(shù)
grid_fit = grid.obj.fit(X_train, y_train)
# 得到最佳逼近
best_clf = grid_fit.best_estimator_
# 分別使用未優(yōu)化超參數(shù)的模型和優(yōu)化了超參數(shù)的模型進(jìn)行預(yù)測:
predictions = (clf.fit(X_train, y_train)).predict(X_test)
best_predicotins = best_clf.predict(X_test)
# 報告之前和之后的評分
print("Unpotimized model ------")
print("Accuracy score on testing data: {:.p6}".format(accuracy_score(y_test, predictions)))
print("F-score on testing data: {:.4f}".format(fbeta_score(y_test,predictions, beta=0.5, average="micro")))
好了。你可以看到,我們模型的表現(xiàn)略有提升。
使用模型進(jìn)行預(yù)測
最終,給我們的模型多個特征的一組值,看看它的預(yù)測:
恭喜!你成功搭建了你自己的機(jī)器學(xué)習(xí)分類器,該分類器可以預(yù)測好酒和烈酒。
思考題
你的分類器更適合檢測一般的葡萄酒,還是更適合檢測好的葡萄酒?你認(rèn)為可能的原因是什么?
你會向釀酒廠推薦你的分類器嗎?為什么?
如果使用回歸技術(shù),而不是分類技術(shù),模型的表現(xiàn)將如何?
接下來呢?
嘗試在白葡萄酒數(shù)據(jù)集上預(yù)測酒的品質(zhì)
去Kaggle逛逛,看看不同的數(shù)據(jù)集,嘗試下你覺得有趣的數(shù)據(jù)集
編寫一個使用你的機(jī)器學(xué)習(xí)模型的API服務(wù),然后創(chuàng)建一個web應(yīng)用/移動應(yīng)用
-
人工智能
+關(guān)注
關(guān)注
1797文章
47867瀏覽量
240779 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8453瀏覽量
133152 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1210瀏覽量
24861
原文標(biāo)題:如何使用機(jī)器學(xué)習(xí)預(yù)測葡萄酒品質(zhì)
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
PSoC Creator在線或W / W /葡萄酒問題
自回歸滯后模型進(jìn)行多變量時間序列預(yù)測案例分享
酒鏈幣數(shù)字資產(chǎn)軟件開發(fā)平臺
酒鏈幣場景部暑軟件開發(fā)平臺
區(qū)塊鏈技術(shù)給葡萄酒拍賣業(yè)務(wù)帶來了哪些優(yōu)勢?
通過RFID技術(shù)對藏酒實施智能管理 海爾智慧酒柜為消費(fèi)者提供貼心的服務(wù)
改進(jìn)粒子群優(yōu)化神經(jīng)網(wǎng)絡(luò)的葡萄酒質(zhì)量識別
![改進(jìn)粒子群優(yōu)化神經(jīng)網(wǎng)絡(luò)的<b class='flag-5'>葡萄酒</b>質(zhì)量識別](https://file.elecfans.com/web1/M00/82/7C/o4YBAFw-0q2AaHkRAACXKu517eE233.png)
評論