
簡(jiǎn)介: 在現(xiàn)實(shí)生活中,除了分類(lèi)問(wèn)題外,也存在很多需要預(yù)測(cè)出具體值的回歸問(wèn)題,例如年齡預(yù)測(cè)、房?jī)r(jià)預(yù)測(cè)、股價(jià)預(yù)測(cè)等。相比分類(lèi)問(wèn)題而言,回歸問(wèn)題輸出類(lèi)型為一個(gè)連續(xù)值,如下表所示為兩者的區(qū)別。在本文中,將完成房?jī)r(jià)預(yù)測(cè)這一回歸問(wèn)題。

■ 分類(lèi)問(wèn)題與回歸問(wèn)題區(qū)別
對(duì)于一個(gè)回歸問(wèn)題,從簡(jiǎn)單到復(fù)雜,可以采取的模型有多層感知機(jī)、SVR、回歸森林算法等,下面將介紹如何使用這些算法完成這一任務(wù)。
01、使用MLP實(shí)現(xiàn)房?jī)r(jià)預(yù)測(cè)
首先是載入需要的各種包以及數(shù)據(jù)集,與前面使用樹(shù)模型等不同的地方在于,使用多層感知機(jī)模型需要對(duì)數(shù)據(jù)集的X和y都根據(jù)最大最小值進(jìn)行歸一化處理。下圖所示程序使用了線性歸一化的方法,即

這種歸一化方法比較適用在數(shù)值比較集中的情況。這種方法有個(gè)缺陷,如max和min不穩(wěn)定,很容易使得歸一化結(jié)果不穩(wěn)定,使得后續(xù)使用效果也不穩(wěn)定,實(shí)際使用中可以用經(jīng)驗(yàn)常量值來(lái)替代max和min。
sklearn庫(kù)中提供了歸一化的接口,如代碼清單1所示為加載數(shù)據(jù)集并進(jìn)行歸一化處理的代碼實(shí)現(xiàn)。
代碼清單1 加載數(shù)據(jù)集并進(jìn)行預(yù)處理操作
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import mean_squared_error, mean_absolute_error
# 加載數(shù)據(jù)集并進(jìn)行歸一化預(yù)處理
def loadDataSet():
boston_dataset = load_boston()
X = boston_dataset.data
y = boston_dataset.target
y = y.reshape(-1, 1)
# 將數(shù)據(jù)劃分為訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 分別初始化對(duì)特征和目標(biāo)值的標(biāo)準(zhǔn)化器
ss_X, ss_y = preprocessing.MinMaxScaler(), preprocessing.MinMaxScaler()
# 分別對(duì)訓(xùn)練和測(cè)試數(shù)據(jù)的特征以及目標(biāo)值進(jìn)行標(biāo)準(zhǔn)化處理
X_train, y_train = ss_X.fit_transform(X_train), ss_y.fit_transform(y_train)
X_test, y_test = ss_X.transform(X_test), ss_y.transform(y_test)
y_train, y_test = y_train.reshape(-1, ), y_test.reshape(-1, )
return X_train, X_test, y_train, y_test
在預(yù)處理過(guò)數(shù)據(jù)集后,構(gòu)建MLP模型,并設(shè)置模型的超參數(shù),并在訓(xùn)練集上訓(xùn)練模型。
代碼清單2 訓(xùn)練多層感知機(jī)模型
def trainMLP(X_train, y_train):
model_mlp = MLPRegressor(
hidden_layer_sizes=(20, 1), activation='logistic', solver='adam', alpha=0.0001, batch_size='auto',
learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=5000, shuffle=True,
random_state=1, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True,
early_stopping=False, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
model_mlp.fit(X_train, y_train)
return model_mlp
如代碼清單2所示,該模型的超參數(shù)較多,最重要的幾個(gè)超參數(shù)為hidden_layer_sizes(隱藏層神經(jīng)元個(gè)數(shù),在本次實(shí)驗(yàn)當(dāng)中隱藏層分別為5和1),activations(激活函數(shù),可以選擇relu、logistic、tanh等),solver(優(yōu)化方法,即sgd、adam等),以及與優(yōu)化方法相關(guān)的learning_rate(學(xué)習(xí)率),momentum(動(dòng)量)等,設(shè)置完模型參數(shù)后,使用fit函數(shù)完成訓(xùn)練過(guò)程。
代碼清單3 測(cè)試模型效果
def test(model, X_test, y_test):
y_pre = model.predict(X_test)
print("The mean root mean square error of MLP-Model is {}".format(mean_squared_error(y_test, y_pre)**0.5))
print("The mean squared error of MLP-Model is {}".format(mean_squared_error(y_test, y_pre)))
print("The mean absolute error of MLP-Model is {}".format(mean_absolute_error(y_test, y_pre)))
訓(xùn)練完成后在測(cè)試集上驗(yàn)證模型的效果,如代碼清單3所示,不同于分類(lèi)模型有準(zhǔn)確率召回率等指標(biāo),回歸模型驗(yàn)證模型效果通常采用MSE,MAE、RMSE等。
MSE(Mean Squared Error)叫做均方誤差

MAE(Mean Absolute Error)為平均絕對(duì)誤差,是絕對(duì)誤差的平均值,能更好地反映預(yù)測(cè)值誤差的實(shí)際情況

RMSE(Root Mean Square Error)為均方根誤差,是用來(lái)衡量觀測(cè)值同真值之間的偏差

以上三項(xiàng)指標(biāo)的值越小,則表示在測(cè)試集上預(yù)測(cè)的結(jié)果與真實(shí)結(jié)果之間的偏差越小,模型擬合效果越好。
如代碼清單4所示,在主函數(shù)中依次調(diào)用上述函數(shù),完成導(dǎo)入數(shù)據(jù)集、訓(xùn)練、預(yù)測(cè)的全過(guò)程。
代碼清單4 構(gòu)建main函數(shù)
if __name__ == '__main__':
X_train, X_test, y_train, y_test = loadDataSet()
# 訓(xùn)練MLP模型
model = trainMLP(X_train, y_train)
test(model, X_test, y_test)
最終可得輸出如下圖1所示。

圖1 MLP模型預(yù)測(cè)效果
改變實(shí)驗(yàn)中的超參數(shù),例如隱藏層的神經(jīng)元個(gè)數(shù),可以得到不同的模型以及這些模型在測(cè)試集上的得分。如表2所示,當(dāng)神經(jīng)元個(gè)數(shù)為10時(shí),三項(xiàng)指標(biāo)均獲得了最小值,因此可以固定神經(jīng)元個(gè)數(shù)為10,再調(diào)整其他參數(shù),例如激活函數(shù)、優(yōu)化方法等。
【小技巧】在難以確定參數(shù)時(shí),可以將模型在訓(xùn)練集和測(cè)試集的誤差都打印出來(lái),當(dāng)訓(xùn)練集誤差遠(yuǎn)遠(yuǎn)大于測(cè)試集誤差時(shí),可能會(huì)存在過(guò)擬合的問(wèn)題,應(yīng)當(dāng)減少參數(shù)數(shù)目,即神經(jīng)元的個(gè)數(shù)。當(dāng)訓(xùn)練集的誤差與測(cè)試集誤差都很大時(shí),存在欠擬合的問(wèn)題,應(yīng)當(dāng)增加神經(jīng)元的個(gè)數(shù)。
表2 不同神經(jīng)元個(gè)數(shù)的預(yù)測(cè)結(jié)果

02、使用隨機(jī)森林模型實(shí)現(xiàn)房?jī)r(jià)預(yù)測(cè)
如代碼清單5、代碼清單6所示,導(dǎo)入與隨機(jī)森林回歸模型有關(guān)的包,并新增使用隨機(jī)森林訓(xùn)練模型的函數(shù),修改主函數(shù),其他部分保持不變。
代碼清單5 使用隨機(jī)森林模型進(jìn)行訓(xùn)練
def trainRF(X_train, y_train):
model_rf = RandomForestRegressor(n_estimators=10000)
model_rf.fit(X_train, y_train)
return model_rf
代碼清單6 修改main函數(shù)內(nèi)容
if __name__ == '__main__':
X_train, X_test, y_train, y_test = loadDataSet()
# 訓(xùn)練RF模型
model = trainRF(X_train, y_train)
test(model, X_test, y_test)
最終得到如圖2所示為命令行輸出結(jié)果。

圖2 隨機(jī)森林模型預(yù)測(cè)結(jié)果
下面調(diào)節(jié)n_estimators的數(shù)目,并記錄相應(yīng)的評(píng)價(jià)指標(biāo)大小。如表3所示為一個(gè)隨機(jī)森林中決策數(shù)目發(fā)生變化時(shí)評(píng)價(jià)指標(biāo)的變化??梢园l(fā)現(xiàn),隨著決策樹(shù)數(shù)目的上升,各項(xiàng)指標(biāo)都變得更優(yōu),一般而言,一個(gè)森林中決策樹(shù)的個(gè)數(shù)越多,模型預(yù)測(cè)的準(zhǔn)確率越高,但相應(yīng)的會(huì)消耗更多的計(jì)算資源,因此在實(shí)際應(yīng)用當(dāng)中應(yīng)當(dāng)權(quán)衡效率與正確性這兩點(diǎn)。
表3 隨機(jī)森林不同決策樹(shù)數(shù)目預(yù)測(cè)結(jié)果

03、文末贈(zèng)書(shū)
這是一本講述如何用NLP技術(shù)進(jìn)行文本內(nèi)容理解的著作,也是一本系統(tǒng)講解NLP算法的著作,是作者在NLP和內(nèi)容理解領(lǐng)域多年經(jīng)驗(yàn)的總結(jié)。
本書(shū)結(jié)合內(nèi)容理解的實(shí)際業(yè)務(wù)場(chǎng)景,系統(tǒng)全面、循序漸進(jìn)地講解了各種NLP算法以及如何用這些算法高效地解決內(nèi)容理解方面的難題,主要包括如下幾個(gè)方面的內(nèi)容:
(1)文本特征表示
文本特征表示是NLP的基石,也是內(nèi)容理解的基礎(chǔ)環(huán)節(jié),本書(shū)詳細(xì)講解了離散型表示方法和分布型表示方法等特征表示方法及其應(yīng)用場(chǎng)景,還講解了詞向量的評(píng)判標(biāo)準(zhǔn)。
(2)內(nèi)容重復(fù)理解
詳細(xì)講解了標(biāo)題重復(fù)、段落重復(fù)、文章重復(fù)的識(shí)別方法和去重算法。
(3)內(nèi)容通順度識(shí)別及糾正
詳細(xì)講解了內(nèi)容通順度的識(shí)別方法以及糾正不通順內(nèi)容的各種算法。
(4)內(nèi)容質(zhì)量
詳細(xì)講解了多種內(nèi)容質(zhì)量相關(guān)的算法,以及如何搭建高質(zhì)量的知識(shí)問(wèn)答體系的流程。
(5)標(biāo)簽體系構(gòu)建
詳細(xì)講解了針對(duì)內(nèi)容理解的標(biāo)簽體系的建設(shè)流程和方法,以及相關(guān)的多種算法。
(6)文本摘要生成
詳細(xì)講解了抽取式文本摘要和生成式文本摘要兩種流行的文本摘要生成方法,以及文本摘要的常用數(shù)據(jù)集和文本摘要評(píng)價(jià)方法。
(7)文本糾錯(cuò)
詳細(xì)講解了文本糾錯(cuò)的傳統(tǒng)方法、深度學(xué)習(xí)方法、工業(yè)界解決方案,以及常用的文本糾錯(cuò)工具的安裝和使用。

◆作者簡(jiǎn)介◆
李明琦
資深A(yù)I技術(shù)專(zhuān)家,現(xiàn)就職于BAT,擔(dān)任高級(jí)算法工程師。長(zhǎng)期致力于機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、NLP等技術(shù)在實(shí)際業(yè)務(wù)場(chǎng)景中的落地,在內(nèi)容理解方面有豐富的經(jīng)驗(yàn),主導(dǎo)的內(nèi)容質(zhì)量項(xiàng)目曾獲得最佳項(xiàng)目獎(jiǎng)。
先后發(fā)表人工智能相關(guān)的學(xué)術(shù)論文2篇,申請(qǐng)人工智能領(lǐng)域的發(fā)明專(zhuān)利5項(xiàng)。在GitHub上貢獻(xiàn)了大量?jī)?nèi)容質(zhì)量、問(wèn)答系統(tǒng)、NLP等方面的代碼,在CSDN撰寫(xiě)了一些與算法、機(jī)器學(xué)習(xí)、內(nèi)容理解相關(guān)的文章,深受歡迎。
谷雪
現(xiàn)為葡萄牙米尼奧大學(xué)博士生,涉及的研究領(lǐng)域?yàn)樯窠?jīng)架構(gòu)搜索、自然語(yǔ)言處理、情感分析,博士期間著力于細(xì)粒度情感原因提取。先后發(fā)表過(guò)學(xué)術(shù)論文2篇,其中一篇是神經(jīng)架構(gòu)搜索的綜述,另一篇是基于進(jìn)化策略的神經(jīng)架構(gòu)演化方法。在開(kāi)源平臺(tái)GitHub上貢獻(xiàn)了大量深度學(xué)習(xí)、機(jī)器學(xué)習(xí)代碼,在CSDN上分享了服務(wù)器配置、數(shù)據(jù)分析、圖像去噪、情感分析等方向的多篇文章。
孟子堯
在人工智能技術(shù)領(lǐng)域有非常深厚的積累,擅長(zhǎng)機(jī)器學(xué)習(xí)和深度學(xué)習(xí),尤其是深度學(xué)習(xí)中的圖像分類(lèi)和自然語(yǔ)言處理等技術(shù)。熱衷于開(kāi)源的應(yīng)用和推廣,在Github和CSDN上貢獻(xiàn)了許多代碼和文章。曾在《計(jì)算機(jī)研究與發(fā)展》上發(fā)表過(guò)1篇人工智能相關(guān)論文。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-411720.html
參與方式:評(píng)論區(qū)置頂評(píng)論紅包手氣王自動(dòng)獲得技術(shù)圖書(shū)《基于NLP的內(nèi)容理解》1本!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-411720.html
到了這里,關(guān)于PyTorch深度學(xué)習(xí)實(shí)戰(zhàn) | 基于多層感知機(jī)模型和隨機(jī)森林模型的某地房?jī)r(jià)預(yù)測(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!