項(xiàng)目 1: 預(yù)測(cè)波士頓房?jī)r(jià)

機(jī)器學(xué)習(xí)工程師納米學(xué)位

模型評(píng)價(jià)與驗(yàn)證

項(xiàng)目 1: 預(yù)測(cè)波士頓房?jī)r(jià)

歡迎來(lái)到機(jī)器學(xué)習(xí)工程師納米學(xué)位的第一個(gè)項(xiàng)目!在此文件中,有些示例代碼已經(jīng)提供給你怪瓶,但你還需要實(shí)現(xiàn)更多的功能來(lái)讓項(xiàng)目成功運(yùn)行世蔗。除非有明確要求,你無(wú)須修改任何已給出的代碼珊随。以編程練習(xí)開始的標(biāo)題表示接下來(lái)的內(nèi)容中有需要你必須實(shí)現(xiàn)的功能述寡。每一部分都會(huì)有詳細(xì)的指導(dǎo)柿隙,需要實(shí)現(xiàn)的部分也會(huì)在注釋中以TODO標(biāo)出。請(qǐng)仔細(xì)閱讀所有的提示鲫凶!

除了實(shí)現(xiàn)代碼外禀崖,你還必須回答一些與項(xiàng)目和實(shí)現(xiàn)有關(guān)的問(wèn)題。每一個(gè)需要你回答的問(wèn)題都會(huì)以'問(wèn)題 X'為標(biāo)題螟炫。請(qǐng)仔細(xì)閱讀每個(gè)問(wèn)題波附,并且在問(wèn)題后的'回答'文字框中寫出完整的答案。你的項(xiàng)目將會(huì)根據(jù)你對(duì)問(wèn)題的回答和撰寫代碼所實(shí)現(xiàn)的功能來(lái)進(jìn)行評(píng)分昼钻。

提示:Code 和 Markdown 區(qū)域可通過(guò) Shift + Enter 快捷鍵運(yùn)行掸屡。此外,Markdown可以通過(guò)雙擊進(jìn)入編輯模式然评。


第一步. 導(dǎo)入數(shù)據(jù)

在這個(gè)項(xiàng)目中仅财,你將利用馬薩諸塞州波士頓郊區(qū)的房屋信息數(shù)據(jù)訓(xùn)練和測(cè)試一個(gè)模型,并對(duì)模型的性能和預(yù)測(cè)能力進(jìn)行測(cè)試沾瓦。通過(guò)該數(shù)據(jù)訓(xùn)練后的好的模型可以被用來(lái)對(duì)房屋做特定預(yù)測(cè)---尤其是對(duì)房屋的價(jià)值满着。對(duì)于房地產(chǎn)經(jīng)紀(jì)等人的日常工作來(lái)說(shuō),這樣的預(yù)測(cè)模型被證明非常有價(jià)值贯莺。

此項(xiàng)目的數(shù)據(jù)集來(lái)自UCI機(jī)器學(xué)習(xí)知識(shí)庫(kù)(數(shù)據(jù)集已下線)风喇。波士頓房屋這些數(shù)據(jù)于1978年開始統(tǒng)計(jì),共506個(gè)數(shù)據(jù)點(diǎn)缕探,涵蓋了麻省波士頓不同郊區(qū)房屋14種特征的信息魂莫。本項(xiàng)目對(duì)原始數(shù)據(jù)集做了以下處理:

  • 有16個(gè)'MEDV' 值為50.0的數(shù)據(jù)點(diǎn)被移除。 這很可能是由于這些數(shù)據(jù)點(diǎn)包含遺失看不到的值爹耗。
  • 有1個(gè)數(shù)據(jù)點(diǎn)的 'RM' 值為8.78. 這是一個(gè)異常值耙考,已經(jīng)被移除。
  • 對(duì)于本項(xiàng)目潭兽,房屋的'RM'倦始, 'LSTAT''PTRATIO'以及'MEDV'特征是必要的山卦,其余不相關(guān)特征已經(jīng)被移除鞋邑。
  • 'MEDV'特征的值已經(jīng)過(guò)必要的數(shù)學(xué)轉(zhuǎn)換,可以反映35年來(lái)市場(chǎng)的通貨膨脹效應(yīng)账蓉。

運(yùn)行下面區(qū)域的代碼以載入波士頓房屋數(shù)據(jù)集枚碗,以及一些此項(xiàng)目所需的Python庫(kù)。如果成功返回?cái)?shù)據(jù)集的大小铸本,表示數(shù)據(jù)集已載入成功肮雨。

# 載入此項(xiàng)目所需要的庫(kù) 
import numpy as np
import pandas as pd
import visuals as vs # Supplementary code

# 檢查你的Python版本 
from sys import version_info
if version_info.major != 2 and version_info.minor != 7:
    raise Exception('請(qǐng)使用Python 2.7來(lái)完成此項(xiàng)目')
    
# 讓結(jié)果在notebook中顯示
%matplotlib inline
# 載入波士頓房屋的數(shù)據(jù)集
data = pd.read_csv('housing.csv')
prices = data['MEDV']
features = data.drop('MEDV', axis = 1)
    
# 完成
print "Boston housing dataset has {} data points with {} variables each.".format(*data.shape)

Boston housing dataset has 489 data points with 4 variables each.


第二步. 分析數(shù)據(jù)

在項(xiàng)目的第一個(gè)部分,你會(huì)對(duì)波士頓房地產(chǎn)數(shù)據(jù)進(jìn)行初步的觀察并給出你的分析箱玷。通過(guò)對(duì)數(shù)據(jù)的探索來(lái)熟悉數(shù)據(jù)可以讓你更好地理解和解釋你的結(jié)果怨规。

由于這個(gè)項(xiàng)目的最終目標(biāo)是建立一個(gè)預(yù)測(cè)房屋價(jià)值的模型陌宿,我們需要將數(shù)據(jù)集分為特征(features)目標(biāo)變量(target variable)

  • 特征 'RM'椅亚, 'LSTAT'限番,和 'PTRATIO',給我們提供了每個(gè)數(shù)據(jù)點(diǎn)的數(shù)量相關(guān)的信息呀舔。
  • 目標(biāo)變量'MEDV'弥虐,是我們希望預(yù)測(cè)的變量。

他們分別被存在featuresprices兩個(gè)變量名中媚赖。

編程練習(xí) 1:基礎(chǔ)統(tǒng)計(jì)運(yùn)算

你的第一個(gè)編程練習(xí)是計(jì)算有關(guān)波士頓房?jī)r(jià)的描述統(tǒng)計(jì)數(shù)據(jù)霜瘪。我們已為你導(dǎo)入了numpy,你需要使用這個(gè)庫(kù)來(lái)執(zhí)行必要的計(jì)算惧磺。這些統(tǒng)計(jì)數(shù)據(jù)對(duì)于分析模型的預(yù)測(cè)結(jié)果非常重要的颖对。 在下面的代碼中,你要做的是:

  • 計(jì)算prices中的'MEDV'的最小值磨隘、最大值缤底、均值、中值和標(biāo)準(zhǔn)差番捂;
  • 將運(yùn)算結(jié)果儲(chǔ)存在相應(yīng)的變量中个唧。
#TODO 1

#目標(biāo):計(jì)算價(jià)值的最小值
minimum_price = np.min(prices)

#目標(biāo):計(jì)算價(jià)值的最大值
maximum_price = np.max(prices)

#目標(biāo):計(jì)算價(jià)值的平均值
mean_price = np.mean(prices)

#目標(biāo):計(jì)算價(jià)值的中值
median_price = np.median(prices)

#目標(biāo):計(jì)算價(jià)值的標(biāo)準(zhǔn)差
std_price = np.std(prices)

#目標(biāo):輸出計(jì)算的結(jié)果
print "Statistics for Boston housing dataset:\n"
print "Minimum price: ${:,.2f}".format(minimum_price)
print "Maximum price: ${:,.2f}".format(maximum_price)
print "Mean price: ${:,.2f}".format(mean_price)
print "Median price ${:,.2f}".format(median_price)
print "Standard deviation of prices: ${:,.2f}".format(std_price)

Statistics for Boston housing dataset:

Minimum price: 105,000.00 Maximum price:1,024,800.00
Mean price: 454,342.94 Median price438,900.00
Standard deviation of prices: $165,171.13

問(wèn)題 1 - 特征觀察

如前文所述,本項(xiàng)目中我們關(guān)注的是其中三個(gè)值:'RM'设预、'LSTAT''PTRATIO'徙歼,對(duì)每一個(gè)數(shù)據(jù)點(diǎn):

  • 'RM' 是該地區(qū)中每個(gè)房屋的平均房間數(shù)量;
  • 'LSTAT' 是指該地區(qū)有多少百分比的業(yè)主屬于是低收入階層(有工作但收入微北钫怼)魄梯;
  • 'PTRATIO' 是該地區(qū)的中學(xué)和小學(xué)里,學(xué)生和老師的數(shù)目比(學(xué)生/老師)宾符。

憑直覺酿秸,上述三個(gè)特征中對(duì)每一個(gè)來(lái)說(shuō),你認(rèn)為增大該特征的數(shù)值魏烫,'MEDV'的值會(huì)是增大還是減小呢辣苏?每一個(gè)答案都需要你給出理由。

提示:你預(yù)期一個(gè)'RM' 值是6的房屋跟'RM' 值是7的房屋相比则奥,價(jià)值更高還是更低呢考润?

問(wèn)題 1 - 回答:

增大RM值狭园,MEDV值會(huì)增大读处,因?yàn)榉块g數(shù)量增大,房屋面積基本也增大唱矛,造價(jià)就高罚舱,導(dǎo)致房?jī)r(jià)更高井辜;

增大LSTAT值,MEDAV值會(huì)減小管闷,因?yàn)榈褪杖肴藬?shù)比例越多粥脚,能夠買的起高房?jī)r(jià)的就越少,所有該地區(qū)普遍房?jī)r(jià)會(huì)低包个,也可以認(rèn)為因?yàn)榉績(jī)r(jià)低,才導(dǎo)致很多低收入群到這來(lái);

增大PTRATIO值璧榄,MEDAV值會(huì)減小供嚎,因?yàn)閷W(xué)生多老師少,可能是該地區(qū)比較貧困糯而,居民收入偏低天通,學(xué)生家長(zhǎng)請(qǐng)不起更多老師;而地區(qū)越發(fā)達(dá)熄驼,學(xué)生家長(zhǎng)就越能請(qǐng)的起老師像寒,實(shí)現(xiàn)一對(duì)一教學(xué),也居民收入也越高瓜贾,自然房子購(gòu)買力更足诺祸,房?jī)r(jià)更高。

編程練習(xí) 2: 數(shù)據(jù)分割與重排

接下來(lái)阐虚,你需要把波士頓房屋數(shù)據(jù)集分成訓(xùn)練和測(cè)試兩個(gè)子集序臂。通常在這個(gè)過(guò)程中,數(shù)據(jù)也會(huì)被重排列实束,以消除數(shù)據(jù)集中由于順序而產(chǎn)生的偏差奥秆。 在下面的代碼中,你需要

使用 sklearn.model_selection 中的 train_test_split咸灿, 將featuresprices的數(shù)據(jù)都分成用于訓(xùn)練的數(shù)據(jù)子集和用于測(cè)試的數(shù)據(jù)子集构订。

  • 分割比例為:80%的數(shù)據(jù)用于訓(xùn)練,20%用于測(cè)試避矢;
  • 選定一個(gè)數(shù)值以設(shè)定 train_test_split 中的 random_state 悼瘾,這會(huì)確保結(jié)果的一致性;
# TODO 2

# 提示: 導(dǎo)入train_test_split
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(features,prices,test_size=0.2,random_state=40)

問(wèn)題 2 - 訓(xùn)練及測(cè)試

將數(shù)據(jù)集按一定比例分為訓(xùn)練用的數(shù)據(jù)集和測(cè)試用的數(shù)據(jù)集對(duì)學(xué)習(xí)算法有什么好處审胸?

如果用模型已經(jīng)見過(guò)的數(shù)據(jù)亥宿,例如部分訓(xùn)練集數(shù)據(jù)進(jìn)行測(cè)試,又有什么壞處砂沛?

提示: 如果沒有數(shù)據(jù)來(lái)對(duì)模型進(jìn)行測(cè)試烫扼,會(huì)出現(xiàn)什么問(wèn)題?

問(wèn)題 2 - 回答:

將數(shù)據(jù)集按一定比例訓(xùn)練和測(cè)試的好處是:訓(xùn)練出的模型可以用測(cè)試數(shù)據(jù)來(lái)驗(yàn)證碍庵,能夠很好的驗(yàn)證模型對(duì)新樣本的泛化能力映企,若數(shù)據(jù)不劃分全部用于訓(xùn)練悟狱,雖然訓(xùn)練樣本多,模型能更好的優(yōu)化參數(shù)堰氓,但是沒有測(cè)試數(shù)據(jù)驗(yàn)證模型對(duì)新樣本的預(yù)測(cè)效果挤渐,很難讓我們做出決策,如何對(duì)模型改進(jìn)双絮。

如果用訓(xùn)練的數(shù)據(jù)進(jìn)行模型預(yù)測(cè)浴麻,效果肯定和訓(xùn)練精度相同,但是無(wú)法判斷對(duì)新樣本的預(yù)測(cè)能力囤攀,即泛化能力未知


第三步. 模型衡量標(biāo)準(zhǔn)

在項(xiàng)目的第三步中白胀,你需要了解必要的工具和技巧來(lái)讓你的模型進(jìn)行預(yù)測(cè)。用這些工具和技巧對(duì)每一個(gè)模型的表現(xiàn)做精確的衡量可以極大地增強(qiáng)你預(yù)測(cè)的信心抚岗。

編程練習(xí)3:定義衡量標(biāo)準(zhǔn)

如果不能對(duì)模型的訓(xùn)練和測(cè)試的表現(xiàn)進(jìn)行量化地評(píng)估或杠,我們就很難衡量模型的好壞。通常我們會(huì)定義一些衡量標(biāo)準(zhǔn)宣蔚,這些標(biāo)準(zhǔn)可以通過(guò)對(duì)某些誤差或者擬合程度的計(jì)算來(lái)得到向抢。在這個(gè)項(xiàng)目中,你將通過(guò)運(yùn)算決定系數(shù) R2 來(lái)量化模型的表現(xiàn)胚委。模型的決定系數(shù)是回歸分析中十分常用的統(tǒng)計(jì)信息挟鸠,經(jīng)常被當(dāng)作衡量模型預(yù)測(cè)能力好壞的標(biāo)準(zhǔn)。

R2的數(shù)值范圍從0至1亩冬,表示目標(biāo)變量的預(yù)測(cè)值和實(shí)際值之間的相關(guān)程度平方的百分比艘希。一個(gè)模型的R2 值為0還不如直接用平均值來(lái)預(yù)測(cè)效果好;而一個(gè)R2 值為1的模型則可以對(duì)目標(biāo)變量進(jìn)行完美的預(yù)測(cè)硅急。從0至1之間的數(shù)值覆享,則表示該模型中目標(biāo)變量中有百分之多少能夠用特征來(lái)解釋。模型也可能出現(xiàn)負(fù)值的R2营袜,這種情況下模型所做預(yù)測(cè)有時(shí)會(huì)比直接計(jì)算目標(biāo)變量的平均值差很多撒顿。

在下方代碼的 performance_metric 函數(shù)中,你要實(shí)現(xiàn):

  • 使用 sklearn.metrics 中的 r2_score 來(lái)計(jì)算 y_truey_predict的R2值荚板,作為對(duì)其表現(xiàn)的評(píng)判凤壁。
  • 將他們的表現(xiàn)評(píng)分儲(chǔ)存到score變量中。

  • (可選) 不使用任何外部庫(kù)跪另,參考決定系數(shù)的定義進(jìn)行計(jì)算拧抖,這也可以幫助你更好的理解決定系數(shù)在什么情況下等于0或等于1。
# TODO 3

# 提示: 導(dǎo)入r2_score
from sklearn.metrics import r2_score
def performance_metric(y_true, y_predict):
    """計(jì)算并返回預(yù)測(cè)值相比于預(yù)測(cè)值的分?jǐn)?shù)"""
    
    score = r2_score(y_true,y_predict)

    return score
# TODO 3 可選

# 不允許導(dǎo)入任何計(jì)算決定系數(shù)的庫(kù)

def performance_metric2(y_true, y_predict):
    """計(jì)算并返回預(yù)測(cè)值相比于預(yù)測(cè)值的分?jǐn)?shù)"""
    lens = len(y_true)
    y_mean = sum(y_true)/float(lens)
    sume,sumt = 0,0
    for i in range(lens):
        sumt += (y_true[i] - y_mean)**2
        sume += (y_true[i] - y_predict[i])**2
    
    score = 1-sume/float(sumt)

    return score

問(wèn)題 3 - 擬合程度

假設(shè)一個(gè)數(shù)據(jù)集有五個(gè)數(shù)據(jù)且一個(gè)模型做出下列目標(biāo)變量的預(yù)測(cè):

真實(shí)數(shù)值 預(yù)測(cè)數(shù)值
3.0 2.5
-0.5 0.0
2.0 2.1
7.0 7.8
4.2 5.3

你覺得這個(gè)模型已成功地描述了目標(biāo)變量的變化嗎免绿?如果成功唧席,請(qǐng)解釋為什么,如果沒有,也請(qǐng)給出原因袱吆。

提示:運(yùn)行下方的代碼,使用performance_metric函數(shù)來(lái)計(jì)算模型的決定系數(shù)距淫。

# 計(jì)算這個(gè)模型的預(yù)測(cè)結(jié)果的決定系數(shù)
score = performance_metric2([3, -0.5, 2, 7, 4.2], [2.5, 0.0, 2.1, 7.8, 5.3])
print "Model has a coefficient of determination, R^2, of {:.3f}.".format(score)

Model has a coefficient of determination, R^2, of 0.923.

問(wèn)題 3 - 回答:

成功绞绒。因?yàn)槟P偷臏y(cè)定系數(shù)比較高,而且從數(shù)據(jù)上也能看出來(lái)榕暇,預(yù)測(cè)值和真實(shí)值的變化趨勢(shì)一致蓬衡,且誤差較小。


第四步. 分析模型的表現(xiàn)

在項(xiàng)目的第四步彤枢,我們來(lái)看一下不同參數(shù)下狰晚,模型在訓(xùn)練集和驗(yàn)證集上的表現(xiàn)。這里缴啡,我們專注于一個(gè)特定的算法(帶剪枝的決策樹壁晒,但這并不是這個(gè)項(xiàng)目的重點(diǎn)),和這個(gè)算法的一個(gè)參數(shù) 'max_depth'业栅。用全部訓(xùn)練集訓(xùn)練秒咐,選擇不同'max_depth' 參數(shù),觀察這一參數(shù)的變化如何影響模型的表現(xiàn)碘裕。畫出模型的表現(xiàn)來(lái)對(duì)于分析過(guò)程十分有益携取,這可以讓我們看到一些單看結(jié)果看不到的行為。

學(xué)習(xí)曲線

下方區(qū)域內(nèi)的代碼會(huì)輸出四幅圖像帮孔,它們是一個(gè)決策樹模型在不同最大深度下的表現(xiàn)雷滋。每一條曲線都直觀得顯示了隨著訓(xùn)練數(shù)據(jù)量的增加,模型學(xué)習(xí)曲線的在訓(xùn)練集評(píng)分和驗(yàn)證集評(píng)分的變化文兢,評(píng)分使用決定系數(shù)R2晤斩。曲線的陰影區(qū)域代表的是該曲線的不確定性(用標(biāo)準(zhǔn)差衡量)。

運(yùn)行下方區(qū)域中的代碼姆坚,并利用輸出的圖形回答下面的問(wèn)題尸昧。

# 根據(jù)不同的訓(xùn)練集大小,和最大深度旷偿,生成學(xué)習(xí)曲線
vs.ModelLearning(X_train, y_train)
image.png

問(wèn)題 4 - 學(xué)習(xí)曲線

選擇上述圖像中的其中一個(gè)烹俗,并給出其最大深度。隨著訓(xùn)練數(shù)據(jù)量的增加萍程,訓(xùn)練集曲線的評(píng)分有怎樣的變化幢妄?驗(yàn)證集曲線呢?如果有更多的訓(xùn)練數(shù)據(jù)茫负,是否能有效提升模型的表現(xiàn)呢蕉鸳?

提示:學(xué)習(xí)曲線的評(píng)分是否最終會(huì)收斂到特定的值?

問(wèn)題 4 - 回答:

max_depth=3圖,隨著訓(xùn)練數(shù)據(jù)量的增加潮尝,訓(xùn)練曲線評(píng)分逐漸降低并趨于平穩(wěn)榕吼,驗(yàn)證曲線則隨著數(shù)據(jù)量增加評(píng)分初始變大趨勢(shì)較快,一定程度后相對(duì)平穩(wěn)不變勉失。

按照當(dāng)前趨勢(shì)來(lái)看羹蚣,模型評(píng)分已經(jīng)趨于平穩(wěn),如果再增加更多的訓(xùn)練數(shù)據(jù)乱凿,還是無(wú)法讓模型表現(xiàn)有較大提高顽素。

學(xué)習(xí)曲線評(píng)分最終會(huì)收斂到特定值,或者特定值上下浮動(dòng)一點(diǎn)點(diǎn).

復(fù)雜度曲線

下列代碼內(nèi)的區(qū)域會(huì)輸出一幅圖像徒蟆,它展示了一個(gè)已經(jīng)經(jīng)過(guò)訓(xùn)練和驗(yàn)證的決策樹模型在不同最大深度條件下的表現(xiàn)胁出。這個(gè)圖形將包含兩條曲線,一個(gè)是訓(xùn)練集的變化段审,一個(gè)是驗(yàn)證集的變化全蝶。跟學(xué)習(xí)曲線相似,陰影區(qū)域代表該曲線的不確定性寺枉,模型訓(xùn)練和測(cè)試部分的評(píng)分都用的 performance_metric 函數(shù)裸诽。

運(yùn)行下方區(qū)域中的代碼,并利用輸出的圖形并回答下面的兩個(gè)問(wèn)題型凳。

# 根據(jù)不同的最大深度參數(shù)丈冬,生成復(fù)雜度曲線
vs.ModelComplexity(X_train, y_train)
image.png

問(wèn)題 5 - 偏差(bias)與方差(variance)之間的權(quán)衡取舍

當(dāng)模型以最大深度 1訓(xùn)練時(shí),模型的預(yù)測(cè)是出現(xiàn)很大的偏差還是出現(xiàn)了很大的方差甘畅?當(dāng)模型以最大深度10訓(xùn)練時(shí)埂蕊,情形又如何呢?圖形中的哪些特征能夠支持你的結(jié)論疏唾?

提示: 你如何得知模型是否出現(xiàn)了偏差很大或者方差很大的問(wèn)題蓄氧?

問(wèn)題 5 - 回答:

深度1訓(xùn)練時(shí),模型預(yù)測(cè)出現(xiàn)很大偏差槐脏;從訓(xùn)練得分很低可以看出喉童,出現(xiàn)欠擬合現(xiàn)象,模型方向不對(duì)會(huì)出現(xiàn)較大偏差顿天;

深度10訓(xùn)練時(shí)堂氯,模型預(yù)測(cè)出現(xiàn)較大方差;從訓(xùn)練得分比較高牌废,而預(yù)測(cè)得分卻逐漸下降能夠看出咽白,說(shuō)明此時(shí)出現(xiàn)了過(guò)擬合現(xiàn)象。

問(wèn)題 6- 最優(yōu)模型的猜測(cè)

結(jié)合問(wèn)題 5 中的圖鸟缕,你認(rèn)為最大深度是多少的模型能夠最好地對(duì)未見過(guò)的數(shù)據(jù)進(jìn)行預(yù)測(cè)晶框?你得出這個(gè)答案的依據(jù)是什么排抬?

問(wèn)題 6 - 回答:

從圖可知,最大深度為4時(shí)授段,模型能夠更好的預(yù)測(cè)蹲蒲。依據(jù)是深度為4時(shí),模型訓(xùn)練得分相對(duì)較高侵贵,且增加深度届搁,模型訓(xùn)練得分提高不多,而同時(shí)模燥,預(yù)測(cè)得分在深度4時(shí)達(dá)到最高,然后隨著深度增加掩宜,預(yù)測(cè)得分逐漸下降蔫骂,出現(xiàn)過(guò)擬合現(xiàn)象,因此深度=4是最優(yōu)點(diǎn)牺汤。


第五步. 選擇最優(yōu)參數(shù)

問(wèn)題 7- 網(wǎng)格搜索(Grid Search)

什么是網(wǎng)格搜索法辽旋?如何用它來(lái)優(yōu)化模型?

問(wèn)題 7 - 回答:

網(wǎng)格搜索法是通過(guò)交叉驗(yàn)證的方式進(jìn)行給定參數(shù)遍歷檐迟,獲得最優(yōu)參數(shù)的模型补胚。

使用它來(lái)優(yōu)化模型,先定義需要的模型方法和模型參數(shù)可能的選項(xiàng)追迟,再定義交叉驗(yàn)證的次數(shù)CV溶其,然后輸入數(shù)據(jù)進(jìn)行訓(xùn)練遍歷參數(shù)得到最優(yōu)結(jié)果

問(wèn)題 8 - 交叉驗(yàn)證

  • 什么是K折交叉驗(yàn)證法(k-fold cross-validation)?
  • GridSearchCV是如何結(jié)合交叉驗(yàn)證來(lái)完成對(duì)最佳參數(shù)組合的選擇的敦间?
  • GridSearchCV中的'cv_results_'屬性能告訴我們什么瓶逃?
  • 網(wǎng)格搜索時(shí)如果不使用交叉驗(yàn)證會(huì)有什么問(wèn)題?交叉驗(yàn)證又是如何解決這個(gè)問(wèn)題的廓块?

提示: 在下面 fit_model函數(shù)最后加入 print pd.DataFrame(grid.cv_results_) 可以幫你查看更多信息厢绝。

問(wèn)題 8 - 回答:

K折交叉驗(yàn)證是將訓(xùn)練數(shù)據(jù)分為K等份,用K-1份進(jìn)行訓(xùn)練带猴,剩下的1份進(jìn)行測(cè)試昔汉,循環(huán)遍歷K次,每次預(yù)測(cè)數(shù)據(jù)都是K份中的一份且不重復(fù)拴清,最后統(tǒng)計(jì)所有測(cè)試結(jié)果靶病。

GridSearchCV通過(guò)給定參數(shù)項(xiàng),分別遍歷每種參數(shù)組合口予,且用交叉驗(yàn)證方式進(jìn)行訓(xùn)練測(cè)試嫡秕,最終得到模型效果最優(yōu)組合的參數(shù)。

GridSearchCV中'cv_results_'告訴了我們深度從1到10的每個(gè)深度下進(jìn)行交叉驗(yàn)證的結(jié)果苹威,每個(gè)深度下交叉驗(yàn)證得到的參數(shù)總體有:交叉驗(yàn)證訓(xùn)練時(shí)間和測(cè)試時(shí)間(mean_fit_time mean_score_time)昆咽;每次交叉驗(yàn)證分別的訓(xùn)練得分和測(cè)試得分(split0/1/2_train_score split0/1/2_test_score),以及它們平均得分(mean_test_score mean_train_score);訓(xùn)練和測(cè)試結(jié)果的標(biāo)準(zhǔn)差(std_test_score std_train_score)及所用時(shí)間(std_fit_time std_score_time)等

網(wǎng)格搜索如果不用交叉驗(yàn)證掷酗,尋找的參數(shù)可能不是最優(yōu)參數(shù)組合调违,因?yàn)榻徊骝?yàn)證通過(guò)整體數(shù)據(jù)的預(yù)測(cè)效果來(lái)進(jìn)行評(píng)估,而不是只用部分?jǐn)?shù)據(jù)泻轰,部分?jǐn)?shù)據(jù)有可能質(zhì)量不是很好技肩,容易產(chǎn)生較大偏差。

編程練習(xí) 4:訓(xùn)練最優(yōu)模型

在這個(gè)練習(xí)中浮声,你將需要將所學(xué)到的內(nèi)容整合虚婿,使用決策樹算法訓(xùn)練一個(gè)模型。為了得出的是一個(gè)最優(yōu)模型泳挥,你需要使用網(wǎng)格搜索法訓(xùn)練模型然痊,以找到最佳的 'max_depth' 參數(shù)。你可以把'max_depth' 參數(shù)理解為決策樹算法在做出預(yù)測(cè)前屉符,允許其對(duì)數(shù)據(jù)提出問(wèn)題的數(shù)量剧浸。決策樹是監(jiān)督學(xué)習(xí)算法中的一種。

在下方 fit_model 函數(shù)中矗钟,你需要做的是:

  1. 定義 'cross_validator' 變量: 使用 sklearn.model_selection 中的 KFold 創(chuàng)建一個(gè)交叉驗(yàn)證生成器對(duì)象;
  2. 定義 'regressor' 變量: 使用 sklearn.tree 中的 DecisionTreeRegressor 創(chuàng)建一個(gè)決策樹的回歸函數(shù);
  3. 定義 'params' 變量: 為 'max_depth' 參數(shù)創(chuàng)造一個(gè)字典唆香,它的值是從1至10的數(shù)組;
  4. 定義 'scoring_fnc' 變量: 使用 sklearn.metrics 中的 make_scorer 創(chuàng)建一個(gè)評(píng)分函數(shù); 將 ‘performance_metric’ 作為參數(shù)傳至這個(gè)函數(shù)中吨艇;
  5. 定義 'grid' 變量: 使用 sklearn.model_selection 中的 GridSearchCV 創(chuàng)建一個(gè)網(wǎng)格搜索對(duì)象躬它;將變量'regressor', 'params', 'scoring_fnc''cross_validator' 作為參數(shù)傳至這個(gè)對(duì)象構(gòu)造函數(shù)中;

如果你對(duì)python函數(shù)的默認(rèn)參數(shù)定義和傳遞不熟悉东涡,可以參考這個(gè)MIT課程的視頻虑凛。

# TODO 4

#提示: 導(dǎo)入 'KFold' 'DecisionTreeRegressor' 'make_scorer' 'GridSearchCV' 
from sklearn.model_selection import KFold
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import make_scorer
from sklearn.model_selection  import GridSearchCV

def fit_model(X, y):
    """ 基于輸入數(shù)據(jù) [X,y],利于網(wǎng)格搜索找到最優(yōu)的決策樹模型"""
    
    cross_validator = KFold(n_splits=3, random_state=None,shuffle=False)  
    
    regressor = DecisionTreeRegressor()

    params = {'max_depth':[1,2,3,4,5,6,7,8,9,10]}

    scoring_fnc = make_scorer(performance_metric)

    grid = GridSearchCV(regressor,params,scoring_fnc,cv=cross_validator)

    # 基于輸入數(shù)據(jù) [X,y]软啼,進(jìn)行網(wǎng)格搜索
    grid = grid.fit(X, y)

    # 返回網(wǎng)格搜索后的最優(yōu)模型
    print pd.DataFrame(grid.cv_results_)
#     print grid.best_estimator_
    
    return grid.best_estimator_

編程練習(xí) 4:訓(xùn)練最優(yōu)模型 (可選)

在這個(gè)練習(xí)中桑谍,你將需要將所學(xué)到的內(nèi)容整合,使用決策樹算法訓(xùn)練一個(gè)模型祸挪。為了得出的是一個(gè)最優(yōu)模型锣披,你需要使用網(wǎng)格搜索法訓(xùn)練模型,以找到最佳的 'max_depth' 參數(shù)贿条。你可以把'max_depth' 參數(shù)理解為決策樹算法在做出預(yù)測(cè)前雹仿,允許其對(duì)數(shù)據(jù)提出問(wèn)題的數(shù)量。決策樹是監(jiān)督學(xué)習(xí)算法中的一種整以。

在下方 fit_model 函數(shù)中胧辽,你需要做的是:

  • 遍歷參數(shù)‘max_depth’的可選值 1~10,構(gòu)造對(duì)應(yīng)模型
  • 計(jì)算當(dāng)前模型的交叉驗(yàn)證分?jǐn)?shù)
  • 返回最優(yōu)交叉驗(yàn)證分?jǐn)?shù)對(duì)應(yīng)的模型
# TODO 4 可選

'''
不允許使用 DecisionTreeRegressor 以外的任何 sklearn 庫(kù)

提示: 你可能需要實(shí)現(xiàn)下面的 cross_val_score 函數(shù)

'''

def cross_val_score(estimator, X, y, scoring = performance_metric, cv=3):
    """ 返回每組交叉驗(yàn)證的模型分?jǐn)?shù)的數(shù)組 """
    scores = [0,0,0]
    lens = len(y)
    rs = range(lens)
    r = lens/3
    
    for i in range(cv):
        rst = rs[i*r:(i+1)*r]
        if i == cv-1:
            rst = rs[i*r:]
        regressor = DecisionTreeRegressor(max_depth=estimator)
        x_trains = [X[j] for j in rs if j not in rst]
        y_trains = [y[j] for j in rs if j not in rst]
        x_tests = [X[j] for j in rs if j in rst]
        y_tests = [y[j] for j in rs if j in rst]
        
        regressor.fit(x_trains, y_trains)
        y_predicts = regressor.predict(x_tests)
        scores[i] = performance_metric(y_tests,y_predicts)
        
    return scores
    
def fit_model2(X, y):
    """ 基于輸入數(shù)據(jù) [X,y]公黑,利于網(wǎng)格搜索找到最優(yōu)的決策樹模型"""

    depths = [1,2,3,4,5,6,7,8,9,10]
    temp = 0
    for estimator in depths:
        scores = cross_val_score(estimator, X,y,)
        score_sum = sum(scores)
        if temp < score_sum:
            temp = score_sum
            
            #最優(yōu)交叉驗(yàn)證分?jǐn)?shù)對(duì)應(yīng)的最優(yōu)模型
            best_estimator = estimator
    
    return best_estimator

問(wèn)題 9 - 最優(yōu)模型

最優(yōu)模型的最大深度(maximum depth)是多少邑商?此答案與你在問(wèn)題 6所做的猜測(cè)是否相同摄咆?

運(yùn)行下方區(qū)域內(nèi)的代碼,將決策樹回歸函數(shù)代入訓(xùn)練數(shù)據(jù)的集合人断,以得到最優(yōu)化的模型吭从。

# 基于訓(xùn)練數(shù)據(jù),獲得最優(yōu)模型
optimal_reg = fit_model(X_train, y_train)

# 輸出最優(yōu)模型的 'max_depth' 參數(shù)
print "Parameter 'max_depth' is {} for the optimal model.".format(optimal_reg.get_params()['max_depth'])

mean_fit_time mean_score_time mean_test_score mean_train_score
0 0.001667 0.000667 0.423056 0.477615
1 0.001667 0.001000 0.667136 0.737779
2 0.001000 0.001000 0.753049 0.839994
3 0.001000 0.000000 0.787261 0.882550
4 0.001000 0.000000 0.772829 0.911707
5 0.001000 0.000333 0.755171 0.942524
6 0.001000 0.000333 0.751411 0.961338
7 0.001000 0.000667 0.736549 0.975306
8 0.001000 0.001000 0.724552 0.984313
9 0.001333 0.000000 0.735817 0.989817

param_max_depth params rank_test_score split0_test_score
0 1 {u'max_depth': 1} 10 0.398589
1 2 {u'max_depth': 2} 9 0.623309
2 3 {u'max_depth': 3} 4 0.713617
3 4 {u'max_depth': 4} 1 0.761932
4 5 {u'max_depth': 5} 2 0.752009
5 6 {u'max_depth': 6} 3 0.727003
6 7 {u'max_depth': 7} 5 0.735676
7 8 {u'max_depth': 8} 6 0.699118
8 9 {u'max_depth': 9} 8 0.694437
9 10 {u'max_depth': 10} 7 0.708495

split0_train_score split1_test_score split1_train_score
0 0.483877 0.444084 0.467059
1 0.762738 0.685361 0.721768
2 0.854399 0.762281 0.832283
3 0.897438 0.790892 0.876487
4 0.919756 0.779438 0.909010
5 0.944621 0.758533 0.941908
6 0.964120 0.758993 0.959693
7 0.975513 0.770641 0.974556
8 0.984385 0.739268 0.984944
9 0.989626 0.772538 0.990397

split2_test_score split2_train_score std_fit_time std_score_time
0 0.426682 0.481908 4.713142e-04 4.713704e-04
1 0.693075 0.728831 4.713142e-04 1.123916e-07
2 0.783552 0.833302 0.000000e+00 0.000000e+00
3 0.809154 0.873726 1.123916e-07 0.000000e+00
4 0.787200 0.906353 0.000000e+00 0.000000e+00
5 0.780195 0.941044 1.123916e-07 4.713704e-04
6 0.759684 0.960200 0.000000e+00 4.713704e-04
7 0.740176 0.975848 1.123916e-07 4.714827e-04
8 0.740184 0.983611 0.000000e+00 1.123916e-07
9 0.726628 0.989429 4.713704e-04 0.000000e+00

std_test_score std_train_score
0 0.018760 0.007507
1 0.031268 0.017883
2 0.029302 0.010194
3 0.019460 0.010587
4 0.015114 0.005794
5 0.021858 0.001524
6 0.011172 0.001978
7 0.029329 0.000547
8 0.021380 0.000546
9 0.026954 0.000418
Parameter 'max_depth' is 4 for the optimal model.
</pre>

問(wèn)題 9 - 回答:

最優(yōu)模型最大深度是4,和問(wèn)題6中相同恶迈。

第六步. 做出預(yù)測(cè)

當(dāng)我們用數(shù)據(jù)訓(xùn)練出一個(gè)模型贮折,它現(xiàn)在就可用于對(duì)新的數(shù)據(jù)進(jìn)行預(yù)測(cè)兽埃。在決策樹回歸函數(shù)中,模型已經(jīng)學(xué)會(huì)對(duì)新輸入的數(shù)據(jù)提問(wèn)藻肄,并返回對(duì)目標(biāo)變量的預(yù)測(cè)值伦籍。你可以用這個(gè)預(yù)測(cè)來(lái)獲取數(shù)據(jù)未知目標(biāo)變量的信息跷睦,這些數(shù)據(jù)必須是不包含在訓(xùn)練數(shù)據(jù)之內(nèi)的缚够。

問(wèn)題 10 - 預(yù)測(cè)銷售價(jià)格

想像你是一個(gè)在波士頓地區(qū)的房屋經(jīng)紀(jì)人愿卸,并期待使用此模型以幫助你的客戶評(píng)估他們想出售的房屋。你已經(jīng)從你的三個(gè)客戶收集到以下的資訊:

特征 客戶 1 客戶 2 客戶 3
房屋內(nèi)房間總數(shù) 5 間房間 4 間房間 8 間房間
社區(qū)貧困指數(shù)(%被認(rèn)為是貧困階層) 17% 32% 3%
鄰近學(xué)校的學(xué)生-老師比例 15:1 22:1 12:1

你會(huì)建議每位客戶的房屋銷售的價(jià)格為多少桅狠?從房屋特征的數(shù)值判斷讼载,這樣的價(jià)格合理嗎轿秧?為什么中跌?

提示:用你在分析數(shù)據(jù)部分計(jì)算出來(lái)的統(tǒng)計(jì)信息來(lái)幫助你證明你的答案。

運(yùn)行下列的代碼區(qū)域菇篡,使用你優(yōu)化的模型來(lái)為每位客戶的房屋價(jià)值做出預(yù)測(cè)漩符。

# 生成三個(gè)客戶的數(shù)據(jù)
client_data = [[5, 17, 15], # 客戶 1
               [4, 32, 22], # 客戶 2
               [8, 3, 12]]  # 客戶 3

# 進(jìn)行預(yù)測(cè)
predicted_price = optimal_reg.predict(client_data)
for i, price in enumerate(predicted_price):
    print "Predicted selling price for Client {}'s home: ${:,.2f}".format(i+1, price)

Predicted selling price for Client 1's home: 411,096.00 Predicted selling price for Client 2's home:219,961.54
Predicted selling price for Client 3's home: $955,500.00

問(wèn)題 10 - 回答:

建議客戶1房屋銷售價(jià)格為 411,096這個(gè)價(jià)格合理,該地區(qū)貧困指數(shù)適中驱还,地區(qū)房?jī)r(jià)總體屬于中等嗜暴,并且boston整體平均價(jià)格為 454,342 該價(jià)格和平均價(jià)格相當(dāng),略低于平均價(jià)。

建議客戶2房屋銷售價(jià)格為 219,961這個(gè)價(jià)格合理议蟆,boston房?jī)r(jià)最低價(jià)為 105,000.而該地區(qū)較貧困闷沥,該房屋房間也較少,所以房?jī)r(jià)相對(duì)較低咐容,但高于boston房?jī)r(jià)最低價(jià)舆逃,不屬于異常值。

建議客戶3房屋銷售價(jià)格為 921,900該地區(qū)較為富有戳粒,且該房子房間數(shù)量較多路狮,學(xué)生比例也少,且低于boston的最高價(jià)( 1,024,800)蔚约,這個(gè)價(jià)格不屬于異常值奄妨。

編程練習(xí) 5

你剛剛預(yù)測(cè)了三個(gè)客戶的房子的售價(jià)。在這個(gè)練習(xí)中苹祟,你將用你的最優(yōu)模型在整個(gè)測(cè)試數(shù)據(jù)上進(jìn)行預(yù)測(cè), 并計(jì)算相對(duì)于目標(biāo)變量的決定系數(shù) R2的值**砸抛。

#TODO 5

# 提示:你可能需要用到 X_test, y_test, optimal_reg, performance_metric
# 提示:你可能需要參考問(wèn)題10的代碼進(jìn)行預(yù)測(cè)
# 提示:你可能需要參考問(wèn)題3的代碼來(lái)計(jì)算R^2的值
y_predict = optimal_reg.predict(X_test)


r2 = performance_metric(y_test,y_predict)

print "Optimal model has R^2 score {:,.2f} on test data".format(r2)

Optimal model has R^2 score 0.80 on test data

問(wèn)題11 - 分析決定系數(shù)

你剛剛計(jì)算了最優(yōu)模型在測(cè)試集上的決定系數(shù)评雌,你會(huì)如何評(píng)價(jià)這個(gè)結(jié)果?

問(wèn)題11 - 回答

決定系數(shù)為0.8锰悼,是一個(gè)相對(duì)比較高的得分柳骄,房屋價(jià)格相當(dāng)于有80%的概率推測(cè)準(zhǔn)確。

模型健壯性

一個(gè)最優(yōu)的模型不一定是一個(gè)健壯模型箕般。有的時(shí)候模型會(huì)過(guò)于復(fù)雜或者過(guò)于簡(jiǎn)單耐薯,以致于難以泛化新增添的數(shù)據(jù);有的時(shí)候模型采用的學(xué)習(xí)算法并不適用于特定的數(shù)據(jù)結(jié)構(gòu)丝里;有的時(shí)候樣本本身可能有太多噪點(diǎn)或樣本過(guò)少曲初,使得模型無(wú)法準(zhǔn)確地預(yù)測(cè)目標(biāo)變量。這些情況下我們會(huì)說(shuō)模型是欠擬合的杯聚。

問(wèn)題 12 - 模型健壯性

模型是否足夠健壯來(lái)保證預(yù)測(cè)的一致性臼婆?

提示: 執(zhí)行下方區(qū)域中的代碼,采用不同的訓(xùn)練和測(cè)試集執(zhí)行 fit_model 函數(shù)10次幌绍。注意觀察對(duì)一個(gè)特定的客戶來(lái)說(shuō)颁褂,預(yù)測(cè)是如何隨訓(xùn)練數(shù)據(jù)的變化而變化的。

# 請(qǐng)先注釋掉 fit_model 函數(shù)里的所有 print 語(yǔ)句
vs.PredictTrials(features, prices, fit_model, client_data)

Trial 1: 411,000.00 Trial 2:411,417.39
Trial 3: 415,800.00 Trial 4:428,316.00
Trial 5: 413,334.78 Trial 6:411,931.58
Trial 7: 399,663.16 Trial 8:407,232.00
Trial 9: 402,531.82 Trial 10:413,700.00

Range in prices: $28,652.84
</pre>

問(wèn)題 12 - 回答:

模型足夠健壯傀广。偏差在7%以內(nèi)波動(dòng)

問(wèn)題 13 - 實(shí)用性探討

簡(jiǎn)單地討論一下你建構(gòu)的模型能否在現(xiàn)實(shí)世界中使用颁独?

提示:回答以下幾個(gè)問(wèn)題,并給出相應(yīng)結(jié)論的理由:

  • 1978年所采集的數(shù)據(jù)伪冰,在已考慮通貨膨脹的前提下誓酒,在今天是否仍然適用?
  • 數(shù)據(jù)中呈現(xiàn)的特征是否足夠描述一個(gè)房屋贮聂?
  • 在波士頓這樣的大都市采集的數(shù)據(jù)靠柑,能否應(yīng)用在其它鄉(xiāng)鎮(zhèn)地區(qū)?
  • 你覺得僅僅憑房屋所在社區(qū)的環(huán)境來(lái)判斷房屋價(jià)值合理嗎吓懈?

問(wèn)題 13 - 回答:

今天仍然適用歼冰。不管過(guò)去還是現(xiàn)在,該三大特征是影響房屋主要特征耻警,而將通貨膨脹已經(jīng)考慮進(jìn)去隔嫡,則預(yù)測(cè)的是房屋的價(jià)格相當(dāng)于其價(jià)值。

呈現(xiàn)的特征足夠描述一個(gè)房屋榕栏,但是可能還有其他特征也很重要畔勤,比如:地段因素、人口數(shù)量等

不能應(yīng)用于其他鄉(xiāng)鎮(zhèn)地區(qū)扒磁,因?yàn)猷l(xiāng)鎮(zhèn)地區(qū)的地價(jià)特征庆揪、政府政策特征等與大都市有較大差別,該些特征也很多程度影響房?jī)r(jià)妨托。

不合理缸榛,社區(qū)環(huán)境受到社區(qū)管理吝羞、人口素質(zhì)、天氣狀況等系列影響内颗,社區(qū)環(huán)境相關(guān)性不是很強(qiáng)钧排,有一定的隨機(jī)性,很難用來(lái)判斷房屋價(jià)值均澳。

可選問(wèn)題 - 預(yù)測(cè)北京房?jī)r(jià)

(本題結(jié)果不影響項(xiàng)目是否通過(guò))通過(guò)上面的實(shí)踐恨溜,相信你對(duì)機(jī)器學(xué)習(xí)的一些常用概念有了很好的領(lǐng)悟和掌握。但利用70年代的波士頓房?jī)r(jià)數(shù)據(jù)進(jìn)行建模的確對(duì)我們來(lái)說(shuō)意義不是太大≌仪埃現(xiàn)在你可以把你上面所學(xué)應(yīng)用到北京房?jī)r(jià)數(shù)據(jù)集中 bj_housing.csv糟袁。

免責(zé)聲明:考慮到北京房?jī)r(jià)受到宏觀經(jīng)濟(jì)、政策調(diào)整等眾多因素的直接影響躺盛,預(yù)測(cè)結(jié)果僅供參考项戴。

這個(gè)數(shù)據(jù)集的特征有:

  • Area:房屋面積,平方米
  • Room:房間數(shù)槽惫,間
  • Living: 廳數(shù)周叮,間
  • School: 是否為學(xué)區(qū)房,0或1
  • Year: 房屋建造時(shí)間界斜,年
  • Floor: 房屋所處樓層仿耽,層

目標(biāo)變量:

  • Value: 房屋人民幣售價(jià),萬(wàn)

你可以參考上面學(xué)到的內(nèi)容锄蹂,拿這個(gè)數(shù)據(jù)集來(lái)練習(xí)數(shù)據(jù)分割與重排氓仲、定義衡量標(biāo)準(zhǔn)水慨、訓(xùn)練模型得糜、評(píng)價(jià)模型表現(xiàn)、使用網(wǎng)格搜索配合交叉驗(yàn)證對(duì)參數(shù)進(jìn)行調(diào)優(yōu)并選出最佳參數(shù)晰洒,比較兩者的差別朝抖,最終得出最佳模型對(duì)驗(yàn)證集的預(yù)測(cè)分?jǐn)?shù)。

# TODO 6

# 載入房屋的數(shù)據(jù)集
data = pd.read_csv('bj_housing.csv')
prices = data['Value']
features = data.drop('Value', axis = 1)
print "Boston housing dataset has {} data points with {} variables each.".format(*data.shape)

# 分割數(shù)據(jù)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(features,prices,test_size=0.2,random_state=40)

# 基于訓(xùn)練數(shù)據(jù)谍珊,獲得最優(yōu)模型
optimal_reg = fit_model(X_train, y_train)
print "Parameter 'max_depth' is {} for the optimal model.".format(optimal_reg.get_params()['max_depth'])

# 模型預(yù)測(cè)
y_predict = optimal_reg.predict(X_test)
r2 = performance_metric(y_test,y_predict)
print "Optimal model has R^2 score {:,.2f} on test data".format(r2)

Boston housing dataset has 9999 data points with 7 variables each.
Parameter 'max_depth' is 5 for the optimal model.
Optimal model has R^2 score 0.63 on test data

問(wèn)題14 - 北京房?jī)r(jià)預(yù)測(cè)

你成功的用新的數(shù)據(jù)集構(gòu)建了模型了嗎治宣?他能對(duì)測(cè)試數(shù)據(jù)進(jìn)行驗(yàn)證嗎?它的表現(xiàn)是否符合你的預(yù)期砌滞?交叉驗(yàn)證是否有助于提升你模型的表現(xiàn)侮邀?

提示:如果你是從零開始構(gòu)建機(jī)器學(xué)習(xí)的代碼會(huì)讓你一時(shí)覺得無(wú)從下手。這時(shí)不要著急贝润,你要做的只是查看之前寫的代碼绊茧,把每一行都看明白,然后逐步構(gòu)建你的模型打掘。當(dāng)中遇到什么問(wèn)題也可以在我們論壇尋找答案华畏。也許你會(huì)發(fā)現(xiàn)你所構(gòu)建的模型的表現(xiàn)并沒有達(dá)到你的預(yù)期鹏秋,這說(shuō)明機(jī)器學(xué)習(xí)并非是一項(xiàng)簡(jiǎn)單的任務(wù),構(gòu)建一個(gè)表現(xiàn)良好的模型需要長(zhǎng)時(shí)間的研究和測(cè)試亡笑。這也是我們接下來(lái)的課程中會(huì)逐漸學(xué)到的侣夷。

問(wèn)題14 - 回答

成功構(gòu)建模型,決定系數(shù)為0.63仑乌,驗(yàn)證效果不是很理想百拓。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市晰甚,隨后出現(xiàn)的幾起案子耐版,更是在濱河造成了極大的恐慌,老刑警劉巖压汪,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粪牲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡止剖,警方通過(guò)查閱死者的電腦和手機(jī)腺阳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)穿香,“玉大人亭引,你說(shuō)我怎么就攤上這事∑せ瘢” “怎么了焙蚓?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)洒宝。 經(jīng)常有香客問(wèn)我购公,道長(zhǎng),這世上最難降的妖魔是什么雁歌? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任宏浩,我火速辦了婚禮,結(jié)果婚禮上靠瞎,老公的妹妹穿的比我還像新娘比庄。我一直安慰自己,他們只是感情好乏盐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布佳窑。 她就那樣靜靜地躺著,像睡著了一般父能。 火紅的嫁衣襯著肌膚如雪神凑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天法竞,我揣著相機(jī)與錄音耙厚,去河邊找鬼强挫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛薛躬,可吹牛的內(nèi)容都是我干的俯渤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼型宝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼八匠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起趴酣,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梨树,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后岖寞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抡四,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年仗谆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了指巡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隶垮,死狀恐怖藻雪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狸吞,我是刑警寧澤勉耀,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蹋偏,受9級(jí)特大地震影響便斥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜暖侨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一椭住、第九天 我趴在偏房一處隱蔽的房頂上張望崇渗。 院中可真熱鬧字逗,春花似錦、人聲如沸宅广。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跟狱。三九已至俭厚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驶臊,已是汗流浹背挪挤。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工叼丑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扛门。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓鸠信,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親论寨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子星立,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容