旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實習/?A計劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 如何使用Python構(gòu)建機器學習模型

如何使用Python構(gòu)建機器學習模型

時間:2020-09-26來源:m.5wd995.cn點擊量:作者:Sissi
時間:2020-09-26點擊量:作者:Sissi



  在構(gòu)建機器學習模型時,我們希望將誤差保持在盡可能低的水平。對于任何打算學習Python進行大數(shù)據(jù)分析的人來說,這都是一項關(guān)鍵技能。誤差的兩個主要來源是偏差和方差。如果我們設法減少這兩個,那么我們可以建立更準確的模型。
 

  但是,我們?nèi)绾问紫仍\斷偏差和方差?當我們檢測到某些東西時應該采取什么行動?
 

  在如何使用Python構(gòu)建機器學習模型中,我們將學習如何使用學習曲線來回答這兩個問題。我們將使用現(xiàn)實世界的數(shù)據(jù)集,并嘗試預測電廠的電能輸出。
 

  假定你對scikit學習和機器學習理論有所了解。如果在我說交叉驗證或監(jiān)督學習時你不皺眉,那么你就很好了。如果你是機器學習的新手,并且從未嘗試過scikit,那么如何使用Python構(gòu)建機器學習模型是一個不錯的起點。
 

  我們首先簡要介紹偏差和方差。
 

  偏差方差的權(quán)衡
 

  在監(jiān)督學習中,我們假設特征與目標之間存在真實關(guān)系,并使用模型估算這種未知關(guān)系。如果假設是正確的,那么確實存在一個模型,我們將其稱為\(f \),該模型可以完美描述要素與目標之間的關(guān)系。
 

  實際上,\(f \)幾乎總是完全未知,我們嘗試使用模型\(\ hat {f} \)對其進行估計(注意\(f \)和\(\ hat之間的符號略有不同{F}\))。我們使用特定的訓練集并獲得特定的 \(\ hat {f} \)。如果我們使用不同的訓練集,我們很可能會得到不同的\(\ hat {f} \)。隨著我們不斷更改訓練集,我們得到\(\ hat {f} \)的不同輸出。\(\ hat {f} \)隨著我們更改訓練集而變化的量稱為方差。
 

  要估算真實的\(f \),我們使用不同的方法,例如線性回歸或隨機森林。例如,線性回歸假設特征和目標之間是線性的。但是,對于大多數(shù)現(xiàn)實生活場景而言,要素與目標之間的真實關(guān)系非常復雜,而且并非線性關(guān)系。簡化的假設會使模型產(chǎn)生偏差。關(guān)于真實關(guān)系的假設越錯誤,偏差就越大,反之亦然。
 

  通常,對某些測試數(shù)據(jù)進行測試時,模型\(\ hat {f} \)會出現(xiàn)一些錯誤。從數(shù)學上可以證明,偏差和方差都只會增加模型的誤差。我們希望誤差很小,因此我們需要將偏差和方差保持在最小。但是,這不太可能。偏差和方差之間需要權(quán)衡。
 

  低偏方法非常適合訓練數(shù)據(jù)。如果我們更改訓練集,我們將獲得截然不同的模型\(\ hat {f} \)。

如何使用Python構(gòu)建機器學習模型
 

  你可以看到,低偏差方法可以捕獲不同訓練集之間的大多數(shù)差異(甚至較小的差異)。\(\ hat {f} \)隨我們更改訓練集而變化很大,這表明差異很大。
 

  方法的偏見程度越小,其數(shù)據(jù)擬合能力越強。此能力越大,方差越大。因此,偏差越小,方差越大。
 

  反之亦成立:偏差越大,方差越小。高偏差方法會建立簡單的模型,這些模型通常不適合訓練數(shù)據(jù)。當我們更改訓練集時,通常從高偏置算法獲得的模型\(\ hat {f} \)彼此之間并沒有太大差異。

如何使用Python構(gòu)建機器學習模型
 

  如果在更改訓練集時\(\ hat {f} \)的變化不大,則方差很小,這證明了我們的觀點:偏差越大,方差越小。
 

  從數(shù)學上講,很明顯為什么我們要低偏差和低方差。如上所述,偏差和方差只會增加模型的誤差。但是,從更直觀的角度來看,我們希望低偏差以避免構(gòu)建過于簡單的模型。在大多數(shù)情況下,簡單的模型在訓練數(shù)據(jù)上的表現(xiàn)不佳,并且極有可能在測試數(shù)據(jù)上重復表現(xiàn)不佳的情況。
 

  同樣,我們希望方差較小,以避免構(gòu)建過于復雜的模型。這樣的模型幾乎完全適合訓練集中的所有數(shù)據(jù)點。但是,訓練數(shù)據(jù)通常包含噪聲,僅是來自大量人口的樣本。過于復雜的模型會捕獲該噪聲。當對樣本外數(shù)據(jù)進行測試時,性能通常很差。那是因為模型對樣本訓練數(shù)據(jù)的學習太好了。它對某事了解很多,而對其他事情則一無所知。
 

  但是實際上,我們需要權(quán)衡取舍。我們不能同時擁有低偏見和低方差,因此我們希望瞄準中間的東西。

如何使用Python構(gòu)建機器學習模型
 

  當我們在下面生成和解釋學習曲線時,我們將嘗試為此折衷建立一些實用的直覺。
 

  學習曲線–基本思想
 

  假設我們有一些數(shù)據(jù),并將其分為訓練集和驗證集。我們從訓練集中獲取一個實例(是的,一個!),并使用它來估計模型。然后,我們在驗證集和單個訓練實例上測量模型的誤差。訓練實例上的錯誤將為0,因為完美擬合單個數(shù)據(jù)點非常容易。但是,驗證集上的錯誤將非常大。
 

  這是因為該模型是圍繞單個實例構(gòu)建的,并且?guī)缀蹩梢钥隙ǖ氖?,該模型無法準確地概括以前未見過的數(shù)據(jù)?,F(xiàn)在讓我們說,代替一個訓練實例,我們?nèi)∈畟€并重復誤差測量。然后我們需要五十,一百,五百,直到我們使用了整個訓練集。當我們更改訓練集時,錯誤分數(shù)或多或少會有所不同。因此,我們需要監(jiān)控兩個錯誤評分:一個用于驗證集,一個用于訓練集。如果我們繪制兩個誤差分數(shù)隨訓練集的變化而變化的演變,我們將得到兩條曲線。這些稱為學習曲線。簡而言之,學習曲線顯示了錯誤隨著訓練集大小的增加而如何變化。
 

  下圖應幫助你可視化到目前為止描述的過程。在訓練集列上,你可以看到我們不斷增加訓練集的大小。這會導致我們的模型\(\ hat {f} \)稍有變化。在第一行,其中n = 1(n是訓練實例的數(shù)量),該模型非常適合單個訓練數(shù)據(jù)點。但是,完全相同的模型非常適合20個不同數(shù)據(jù)點的驗證集。因此,模型的訓練集誤差為0,而驗證集的誤差更高。隨著我們增加訓練集的大小,模型不再能夠完美地適合訓練集。因此訓練誤差變得更大。但是,該模型接受了更多數(shù)據(jù)的訓練,因此可以更好地擬合驗證集。因此,驗證誤差減小。提醒你,在所有三種情況下,驗證集均保持不變。

如何使用Python構(gòu)建機器學習模型
 

  如果我們繪制每種訓練量的錯誤分數(shù),我們將獲得兩條與這些相似的學習曲線:

如何使用Python構(gòu)建機器學習模型
 

  學習曲線為我們提供了在監(jiān)督學習模型中診斷偏差和方差的機會。我們將在接下來的內(nèi)容中看到這種可能性。
 

  數(shù)據(jù)介紹
 

  上面繪制的學習曲線已理想用于教學目的。但是,實際上,它們通??雌饋泶蟛幌嗤?。因此,讓我們通過使用一些實際數(shù)據(jù)在實際環(huán)境中進行討論。我們將嘗試建立回歸模型來預測電廠的每小時電能輸出。我們使用的數(shù)據(jù)來自土耳其研究人員P?narTüfekci和Heysem Kaya,可以從此處下載。由于數(shù)據(jù)存儲在.xlsx文件中,因此我們使用pandas read_excel() 函數(shù)讀取數(shù)據(jù):

如何使用Python構(gòu)建機器學習模型
 

  讓我們快速解讀每個列名稱:

如何使用Python構(gòu)建機器學習模型
 

  該PE列是目標變量,它描述了每小時的凈電能輸出。所有其他變量都是潛在特征,每個變量的值實際上是每小時平均值(不是凈值,例如PE)。電力由燃氣輪機,蒸汽輪機和熱回收蒸汽發(fā)生器產(chǎn)生。根據(jù)數(shù)據(jù)集的文檔,真空度會影響蒸汽輪機,而其他三個變量會影響燃氣輪機。因此,我們將在回歸模型中使用所有特征列。在這一步中,我們通常會放置一個測試集,徹底探究訓練數(shù)據(jù),刪除任何異常值,測量相關(guān)性等。但是,出于教學目的,我們假設已經(jīng)完成并直接跳出一些學習曲線。在開始之前,需要注意的是沒有缺失的值。同樣,數(shù)字是未縮放的,但我們將避免使用無法縮放數(shù)據(jù)的模型。
 

  確定訓練集的大小
 

  首先讓我們決定我們要用于生成學習曲線的訓練集大小。最小值為1。最大值由訓練集中的實例數(shù)給出。我們的訓練集有9568個實例,因此最大值為9568。但是,我們尚未預留驗證集。我們將使用80:20的比例進行此操作,最后得到7654個實例的訓練集(80%)和1914個實例的驗證集(20%)。假設我們的訓練集將有7654個實例,則可用于生成學習曲線的最大值為7654。對于我們的情況,在這里,我們使用以下六個大?。?/p>

如何使用Python構(gòu)建機器學習模型
 

  要意識到的重要一點是,對于每個指定的大小,都會訓練一個新模型。如果你正在使用交叉驗證(我們將在如何使用Python構(gòu)建機器學習模型中進行此操作),則將針對每種訓練大小訓練k個模型(其中k由用于交叉驗證的折疊數(shù)給出)。為了節(jié)省代碼運行時間,最好將自己限制為5至10個培訓大小。
 

  scikit-learn中的learning_curve()函數(shù)
 

  我們將使用scikit-learn庫中的learning_curve() 函數(shù)為回歸模型生成學習曲線。我們沒有必要將驗證集放在一邊,因為這learning_curve()會解決這個問題。在下面的代碼單元中,我們:
 

  1)從進行所需的進口sklearn。

  2)聲明功能和目標。

  3)使用learning_curve()生成繪制學習曲線所需的數(shù)據(jù)。該函數(shù)返回一個包含三個元素的元組:訓練集大小,以及驗證集和訓練集上的錯誤分數(shù)。在函數(shù)內(nèi)部,我們使用以下參數(shù):

  a)estimator —表示我們用于估算真實模型的學習算法;

  b)X —包含要素的數(shù)據(jù);

  c)y —包含目標的數(shù)據(jù);

  d)train_sizes —指定要使用的訓練集大小;

  e)cv —確定交叉驗證拆分策略(我們將立即討論);

  f)scoring—指示要使用的錯誤度量;目的是使用均方誤差(MSE)度量,但這不是的可能參數(shù)scoring;我們將使用最接近的代理服務器(負MSE),并且稍后只需要翻轉(zhuǎn)標志即可。

如何使用Python構(gòu)建機器學習模型
 

  我們已經(jīng)知道里面有什么train_sizes。讓我們檢查其他兩個變量以查看learning_curve()返回的結(jié)果:

如何使用Python構(gòu)建機器學習模型
 

  由于我們指定了六個訓練集大小,因此你可能希望每種分數(shù)都有六個值。相反,我們每行有六行,每行有五個錯誤分數(shù)。發(fā)生這種情況是因為learning_curve()在k后臺運行了-fold交叉驗證,其中的值k由我們?yōu)閏v參數(shù)指定的值給出。在我們的示例中,cv = 5將有五個拆分。對于每個分割,針對指定的每個訓練集大小訓練一個估計量。上面兩個數(shù)組中的每一列都指定一個拆分,每一行對應一個測試大小。下表是訓練錯誤分數(shù)的表格,可幫助你更好地了解過程:

如何使用Python構(gòu)建機器學習模型
 

  要繪制學習曲線,我們只需要每個訓練集大小的單個錯誤評分,而不是5。因此,在下一個代碼單元中,我們?nèi)∶恳恍械钠骄?,并翻轉(zhuǎn)錯誤評分的符號(如前所述)以上)。

如何使用Python構(gòu)建機器學習模型
 

  現(xiàn)在,我們擁有繪制學習曲線所需的所有數(shù)據(jù)。但是,在進行繪制之前,我們需要停下來并進行重要觀察。你可能已經(jīng)注意到,訓練集上的某些錯誤分數(shù)是相同的。對于對應于訓練集大小為1的行,這是預期的,但是其他行呢?除了最后一行,我們有很多相同的值。例如,取第二行,從第二個分割開始,我們具有相同的值。為什么?這是由于未對每個分組隨機分配訓練數(shù)據(jù)引起的。讓我們借助下圖瀏覽一個示例。當訓練大小為500時,將選擇訓練集中的前500個實例。
 

  對于第一次拆分,將從第二個塊中獲取這500個實例。從第二個分割開始,這500個實例將從第一塊中取出。因為我們沒有隨機化訓練集,所以用于第二次分割的500個訓練實例是相同的。這說明了從500次訓練實例情況的第二次分割開始的相同值。相同的推理適用于100個實例情況,類似的推理適用于其他情況。

如何使用Python構(gòu)建機器學習模型
 

  要停止這種行為,我們需要在函數(shù)中將shuffle參數(shù)設置為。這將使每個分組的訓練數(shù)據(jù)的索引隨機化。由于以下兩個原因,我們尚未進行隨機分組:Truelearning_curve()
 

  1)數(shù)據(jù)經(jīng)過了五次預混洗(如文檔中所述),因此不再需要隨機化。

  2)我想讓你知道這個怪癖,以防你在實踐中偶然發(fā)現(xiàn)它。
 

  最后,讓我們作圖。
 

  學習曲線–高偏差和低方差
 

  我們使用常規(guī)的matplotlib工作流程繪制學習曲線:

如何使用Python構(gòu)建機器學習模型
如何使用Python構(gòu)建機器學習模型
 

  我們可以從該圖中提取很多信息。讓我們繼續(xù)進行。當訓練集大小為1時,我們可以看到訓練集的MSE為0。這是正?,F(xiàn)象,因為該模型完全適合單個數(shù)據(jù)點時沒有問題。因此,當在同一數(shù)據(jù)點上進行測試時,預測是完美的。但是,當在驗證集(具有1914個實例)上進行測試時,MSE會猛增至大約423.4。此相對較高的值是我們將y軸范圍限制在0到40之間的原因。這使我們能夠精確讀取大多數(shù)MSE值。預期會有如此之高的價值,因為在單個數(shù)據(jù)點上訓練的模型不太可能能夠準確地推廣到訓練中未見的1914個新實例。當訓練集大小增加到100時,訓練MSE急劇增加,
 

  線性回歸模型無法完美預測所有100個訓練點,因此訓練MSE大于0。但是,由于使用更多數(shù)據(jù)進行估算,該模型現(xiàn)在在驗證集上的表現(xiàn)要好得多。從500個訓練數(shù)據(jù)點開始,驗證MSE大致保持不變。這告訴我們一些非常重要的事情:添加更多的訓練數(shù)據(jù)點不會導致明顯更好的模型。因此,除了浪費時間(可能是金錢)來收集更多數(shù)據(jù)之外,我們還需要嘗試其他事情,例如切換到可以構(gòu)建更復雜模型的算法。

如何使用Python構(gòu)建機器學習模型
 

  為了避免在這里產(chǎn)生誤解,請務必注意,真正無濟于事的是向訓練數(shù)據(jù)中添加更多實例(行)。但是,添加更多功能是另一回事,并且很有可能會有所幫助,因為這將增加當前模型的復雜性?,F(xiàn)在讓我們開始診斷偏差和方差。偏差問題的主要指標是較高的驗證誤差。在我們的案例中,驗證MSE停滯在大約20的值。但是,這有多好?我們將從某些領域的知識(在這種情況下可能是物理或工程學)中受益來回答這個問題,但讓我們嘗試一下。
 

  從技術(shù)上講,該值20具有MW \(^ 2 \)(兆瓦平方)作為單位(當我們計算MSE時,單位也將平方)。但是我們的目標列中的值以MW為單位(根據(jù)文檔)。取20 MW \(^ 2 \)的平方根可得出大約4.5 MW。每個目標值代表每小時凈輸出電能。因此,每小時我們的模型平均減少4.5 MW。根據(jù)Quora的回答,4.5 MW相當于4500臺手持式吹風機產(chǎn)生的熱能。如果我們試圖預測一天或更長時間的總能量輸出,這將加起來。我們可以得出結(jié)論,MSE為20 MW \(^ 2 \)很大。因此我們的模型存在偏差問題。
 

  但這是低偏差問題還是高偏差問題?為了找到答案,我們需要查看訓練錯誤。如果訓練誤差非常低,則意味著訓練數(shù)據(jù)非常適合估計模型。如果模型非常適合訓練數(shù)據(jù),則意味著該模型相對于該組數(shù)據(jù)具有較低的偏差。如果訓練誤差高,則意味著估計模型無法很好地擬合訓練數(shù)據(jù)。如果模型不能很好地擬合訓練數(shù)據(jù),則意味著它對該數(shù)據(jù)集有很高的偏見。

如何使用Python構(gòu)建機器學習模型
 

  在我們的特定情況下,訓練的MSE穩(wěn)定在大約20 MW \(^ 2 \)的值。正如我們已經(jīng)確定的那樣,這是一個很高的錯誤評分。因為驗證MSE高,并且訓練MSE也高,所以我們的模型存在高偏差問題?,F(xiàn)在讓我們開始診斷最終的方差問題。估計方差可以通過至少兩種方式完成:
 

  1)通過檢查驗證學習曲線和訓練學習曲線之間的差距。

  2)通過檢查訓練錯誤:隨著訓練集大小的增加,它的價值及其演變。

如何使用Python構(gòu)建機器學習模型
 

  狹窄的差距表明低方差。通常,間隙越窄,方差越小。反之亦然:差距越大,差異越大。現(xiàn)在讓我們解釋為什么會這樣。正如我們之前討論的,如果方差很大,則該模型非常適合訓練數(shù)據(jù)。當訓練數(shù)據(jù)擬合得太好時,模型將難以推廣訓練中未見的數(shù)據(jù)。當在訓練集上然后在驗證集上測試這種模型時,訓練誤差將很低,并且驗證誤差通常會很高。隨著我們更改訓練集大小,這種模式將繼續(xù),并且訓練和驗證錯誤之間的差異將確定兩條學習曲線之間的差距。
 

  訓練和驗證錯誤之間的關(guān)系以及差距可以用以下方式總結(jié):\(差距=驗證\錯誤–訓練\錯誤\)因此,兩個錯誤之間的差異越大,差距就越大。差距越大,差異越大。在我們的情況下,差距非常狹窄,因此我們可以安全地得出結(jié)論,方差很小。訓練有素的 MSE分數(shù)高也是檢測低方差的快速方法。如果學習算法的方差很小,那么當我們更改訓練集時,該算法將提供簡單且相似的模型。由于模型過于簡單,他們甚至不能滿足訓練數(shù)據(jù)以及(他們underfit數(shù)據(jù))。因此,我們應該期待訓練有素的MSE。因此,訓練有素的MSE可用作低方差的指標。

如何使用Python構(gòu)建機器學習模型
 

  在我們的案例中,MSE訓練的高峰期約為20,而我們已經(jīng)得出結(jié)論,這是很高的價值。因此,除了狹窄的差距之外,我們現(xiàn)在還有另一個確認,那就是我們有一個低方差問題。到目前為止,我們可以得出以下結(jié)論:
 

  1)我們的學習算法存在高偏差和低方差的問題,不適合訓練數(shù)據(jù)。

  2)在當前的學習算法下,向訓練數(shù)據(jù)中添加更多實例(行)的可能性極小,無法導致更好的模型。
 

  此時的一種解決方案是更改為更復雜的學習算法。這將減少偏差并增加方差。一個錯誤是嘗試增加訓練實例的數(shù)量。通常,在解決高偏差和低方差問題時,這兩個其他修復程序也起作用:
 

  1)在更多特征上訓練當前的學習算法(為避免收集新數(shù)據(jù),你可以輕松生成多項式特征)。這應該通過增加模型的復雜性來降低偏差。

  2)如果是這樣的話,請 減少當前學習算法的規(guī)則化。簡而言之,正則化會阻止算法很好地擬合訓練數(shù)據(jù)。如果減少正則化,則該模型將更好地擬合訓練數(shù)據(jù),結(jié)果,方差將增加且偏差將減小。
 

  學習曲線–低偏差和高方差
 

  讓我們看看這里的非正規(guī)隨機森林回歸器的價格。我們將使用與上述相同的工作流程來生成學習曲線。這次,我們將所有內(nèi)容捆綁到一個函數(shù)中,以便以后使用。為了進行比較,我們還將顯示上面的線性回歸模型的學習曲線。

如何使用Python構(gòu)建機器學習模型
如何使用Python構(gòu)建機器學習模型
 

  現(xiàn)在,讓我們嘗試應用剛剛學到的知識。最好暫時停止閱讀,然后嘗試自己解釋新的學習曲線。查看驗證曲線,我們可以看到我們已經(jīng)減少了偏差。仍然存在一些明顯的偏見,但沒有以前那么多。觀察訓練曲線,我們可以推斷出這次存在一個低偏差問題。
 

  兩條學習曲線之間的新差距表明方差顯著增加。低訓練水平的MSE證實了這種高方差的診斷。較大的差距和較低的訓練誤差也表示過度擬合的問題。當模型在訓練集上表現(xiàn)良好但在測試(或驗證)集上表現(xiàn)較差時,就會發(fā)生過度擬合。我們在這里可以得出的一個更重要的觀察結(jié)果是,添加新的訓練實例很可能會產(chǎn)生更好的模型。驗證曲線不會穩(wěn)定在所使用的最大訓練集大小上。它仍然有可能減小并收斂到訓練曲線,類似于我們在線性回歸情況下看到的收斂。到目前為止,我們可以得出以下結(jié)論:
 

  1)我們的學習算法(隨機森林)具有較高的方差和相當?shù)偷钠?,因此過度擬合了訓練數(shù)據(jù)。

  2)在當前的學習算法下,添加更多的訓練實例很可能會導致更好的模型。
 

  在這一點上,我們可以做一些事情來改善我們的模型:
 

  1)添加更多的訓練實例。

  2)增加我們當前學習算法的正則化。這將減少方差并增加偏差。

  3)減少我們當前使用的訓練數(shù)據(jù)中的特征數(shù)量。該算法仍將很好地擬合訓練數(shù)據(jù),但是由于特征數(shù)量的減少,它將建立較簡單的模型。這將增加偏差并減小方差。
 

  在我們的情況下,我們沒有任何其他隨時可用的數(shù)據(jù)。我們可以去電廠進行一些測量,但是我們將其保存在另一個帖子中(只是在開玩笑)。讓我們嘗試規(guī)范化我們的隨機森林算法。一種方法是調(diào)整每個決策樹中葉節(jié)點的最大數(shù)量。這可以通過使用max_leaf_nodes參數(shù)來完成RandomForestRegressor()。你不一定必須了解這種正則化技術(shù)。對于我們這里的目的,你需要關(guān)注的是這種正則化對學習曲線的影響。

如何使用Python構(gòu)建機器學習模型
如何使用Python構(gòu)建機器學習模型
 

  不錯!差距現(xiàn)在更窄了,因此變化也更少了。偏見似乎有所增加,這就是我們想要的。但是我們的工作還遠遠沒有結(jié)束!驗證的MSE仍顯示出很大的降低潛力。你可以為實現(xiàn)該目標而采取的一些步驟包括:
 

  1)添加更多的訓練實例。

  2)添加更多功能。

  3)功能選擇。

  4)超參數(shù)優(yōu)化。
 

  理想的學習曲線和不可減少的誤差
 

  學習曲線是在機器學習工作流程的每個點快速檢查我們的模型的好工具。但是我們怎么知道什么時候停止?我們?nèi)绾巫R別完美的學習曲線?對于我們之前的回歸案例,你可能會認為理想的情況是兩條曲線都朝著MSE 0收斂。這確實是理想的情況,但不幸的是,這是不可能的。既沒有實踐,也沒有理論。這是由于某種不可減少的錯誤。當我們構(gòu)建模型以映射特征\(X \)與目標\(Y \)之間的關(guān)系時,我們假設首先存在這種關(guān)系。
 

  如果假設為真,則存在一個真實模型\(f \),該模型完美地描述了\(X \)和\(Y \)之間的關(guān)系,如下所示:
 

  $$
 

  Y = F(X)+束縛\錯誤\標簽{1}
 

  $$
 

  但是為什么會有錯誤呢?我們不是剛剛說\(f \)完美地描述了X和Y之間的關(guān)系嗎?出現(xiàn)錯誤是因為\(Y \)不僅是我們有限數(shù)量的功能\(X \)的函數(shù)??赡苓€有許多其他因素會影響\(Y \)的值。我們沒有的功能。\(X \)也可能包含測量錯誤。因此,除了\(X \),\(Y \)也是\(irreducible \ error \)的函數(shù)?,F(xiàn)在,讓我們解釋一下為什么該錯誤是不可減少的。當我們使用模型\(\ hat {f}(X)\)估算\(f(X)\)時,我們引入了另一種誤差,稱為可歸約誤差:
 

  $$
 

  f(X)= \ hat {f}(X)+可歸約\錯誤\ tag {2}
 

  $$
 

  將\(f(X)\)替換為\((1)\),我們得到:
 

  $
 

  Y = \ hat {f}(X)+可歸約\錯誤+不可約\錯誤\ tag {3}

 

  $$
 

  通過建立更好的模型可以減少可減少的誤差。查看方程\((2)\)我們可以看到,如果\(reducible \ error \)為0,則我們的估計模型\(\ hat {f}(X)\)等于真實模型\(f (X)\)。
 

  但是,從\((3)\)可以看出,即使\(reducible \ error \)為0,方程中也仍然存在\(irreducible \ error \)。由此得出的結(jié)論是,無論模型估算值多么好, ,通常仍然存在一些我們無法減少的錯誤。這就是為什么這個錯誤被認為是不可減少的。這告訴我們,在實踐中,我們可以看到的最佳學習曲線是收斂于某些不可減少誤差的值,而不是收斂于某些理想誤差值的曲線(對于MSE,理想誤差分數(shù)為0;我們將立即看到其他錯誤指標具有不同的理想錯誤

如何使用Python構(gòu)建機器學習模型
 

  實際上,不可減少誤差的確切值幾乎總是未知的。我們還假設不可約誤差與\(X \)無關(guān)。這意味著我們不能使用\(X \)來找到真正的不可約錯誤。用更精確的數(shù)學語言表達同一件事,沒有函數(shù)\(g \)映射\(X \)到不可約誤差的真實值:
 

  $$
 

  不可約\錯誤\ neq g(X)
 

  $$
 

  因此,無法根據(jù)我們擁有的數(shù)據(jù)知道不可減少誤差的真實值。在實踐中,一個好的解決方法是嘗試盡可能降低錯誤分數(shù),同時要記住,限制是由一些不可減少的錯誤所給定的。
 

  那分類呢?
 

  到目前為止,我們已經(jīng)了解了在回歸設置中學習曲線的知識。對于分類任務,工作流程幾乎相同。主要區(qū)別在于,我們將不得不選擇另一種錯誤度量標準-一種適合評估分類器性能的度量標準。讓我們來看一個例子:

如何使用Python構(gòu)建機器學習模型
 

  與到目前為止我們所看到的不同,請注意,訓練錯誤的學習曲線高于驗證錯誤的學習曲線。這是因為所使用的分數(shù)(準確性)描述了模型的良好程度。精度越高,越好。另一方面,MSE描述了模型的嚴重程度。MSE越低越好。這對于不可減少的錯誤也有影響。對于描述模型有多糟糕的錯誤度量標準,不可減少的錯誤給出了一個下限:你不能低于這個范圍。對于描述模型的好壞的度量指標,不可減少的誤差給出了一個上限:你無法獲得更高的誤差。在此附帶說明,在更多的技術(shù)著作中,術(shù)語貝葉斯錯誤率通常用于指代分類器的最佳錯誤評分。這個概念類似于不可減少的誤差。
 

  下一步
 

  學習曲線構(gòu)成了一種在任何監(jiān)督學習算法中診斷偏差和方差的好工具。我們已經(jīng)學習了如何使用scikit-learn和matplotlib生成它們,以及如何使用它們來診斷模型中的偏差和方差。為了鞏固你所學的內(nèi)容,請考慮以下一些步驟:
 

  1)使用不同的數(shù)據(jù)集為回歸任務生成學習曲線。

  2)生成分類任務的學習曲線。

  3)通過從頭開始編寫所有內(nèi)容來生成監(jiān)督學習任務的學習曲線(請勿learning_curve()從scikit-learn中使用)。使用交叉驗證是可選的。

  4)將沒有交叉驗證的學習曲線與使用交叉驗證的曲線進行比較。兩種曲線應用于相同的學習算法。

 

預約申請免費試聽課

填寫下面表單即可預約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可推薦就業(yè)!

?2007-2021/北京漫動者教育科技有限公司版權(quán)所有
備案號:京ICP備12034770號

?2007-2022/ m.5wd995.cn 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號

網(wǎng)站地圖