深度學(xué)習(xí)詳解之初試機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)可應(yīng)用在各個(gè)方面,本篇將在系統(tǒng)性進(jìn)入機(jī)器學(xué)習(xí)方向前,初步認(rèn)識(shí)機(jī)器學(xué)習(xí),利用線性回歸預(yù)測(cè)波士頓房?jī)r(jià);
原理簡(jiǎn)介
利用線性回歸最簡(jiǎn)單的形式預(yù)測(cè)房?jī)r(jià),只需要把它當(dāng)做是一次線性函數(shù)y=kx+b即可。我要做的就是利用已有數(shù)據(jù),去學(xué)習(xí)得到這條直線,有了這條直線,則對(duì)于某個(gè)特征x(比如住宅平均房間數(shù))的任意取值,都可以找到直線上對(duì)應(yīng)的房?jī)r(jià)y,也就是模型的預(yù)測(cè)值。
從上面的問(wèn)題看出,這應(yīng)該是一個(gè)有監(jiān)督學(xué)習(xí)中的回歸問(wèn)題,待學(xué)習(xí)的參數(shù)為實(shí)數(shù)k和實(shí)數(shù)b(因?yàn)榫椭挥幸粋€(gè)特征x),從樣本集合sample中取出一對(duì)數(shù)據(jù)(xi,yi),xi代入kx+b得到輸出y^i,MSE可以衡量預(yù)測(cè)輸出與樣本標(biāo)注的接近程度,所以把MSE作為這個(gè)問(wèn)題的損失函數(shù),對(duì)于共m mm個(gè)樣本的集合,損失函數(shù)計(jì)算為:J(k,b)=1i=1∑m(yi−yi)2
一般需要遍歷數(shù)據(jù)集迭代多次,才能得到一個(gè)較好的結(jié)果
波士頓房?jī)r(jià)數(shù)據(jù)集
房?jī)r(jià)預(yù)測(cè)的實(shí)現(xiàn)將基于sklearn(scikit-learn),sklearn中有多種數(shù)據(jù)集:
- 自帶的小數(shù)據(jù)集(packaged dataset):sklearn.datasets.load_<name>
- 可在線下載的數(shù)據(jù)集(Downloaded Dataset):sklearn.datasets.fetch_<name>
- 自定義生成的數(shù)據(jù)集(Generated Dataset):sklearn.datasets.make_<name>
首先從sklearn的數(shù)據(jù)集獲取內(nèi)置數(shù)據(jù)集中的即波士頓房?jī)r(jià)數(shù)據(jù):
from sklearn.datasets import load_boston
導(dǎo)入其他功能包和模塊,導(dǎo)入線性回歸模型:
# 使用sklearn 中的 train_test_split 劃分?jǐn)?shù)據(jù)集 from sklearn.model_selection import train_test_split # 使用 sklearn 中的線性回歸模型進(jìn)行預(yù)測(cè) from sklearn.linear_model import LinearRegression # 使用 matplotlib 中的 pyplot 進(jìn)行可視化 import matplotlib.pyplot as plt
加載數(shù)據(jù)集:
# 加載波士頓房?jī)r(jià)數(shù)據(jù)集,返回特征X和標(biāo)簽y X, y = load_boston(return_X_y=True) X.shape # (506, 13) y.shape # (506,)
取出一個(gè)特征作為x:
# 只取第6列特征(方便可視化):住宅平均房間數(shù) # 注意切片區(qū)間左閉右開(kāi) X = X[:,5:6]
劃分為訓(xùn)練集和測(cè)試集,測(cè)試集取20%:
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2, random_state=2020)
使用到sklearn.model_selection.train_test_split,函數(shù)形式為:
train_test_split(train_data, train_target, test_size, random_state,shuffle)
- test_size:浮點(diǎn)數(shù),在0 ~ 1之間,表示測(cè)試樣本占比
- random_state:隨機(jī)種子,種子不同,每次調(diào)用時(shí)采樣的樣本不同;種子相同,每次調(diào)用時(shí)采樣一致
- shuffle = True,打亂樣本數(shù)據(jù)的順序
嚴(yán)格來(lái)說(shuō),對(duì)于有監(jiān)督學(xué)習(xí)的數(shù)據(jù)集應(yīng)分為訓(xùn)練集,驗(yàn)證集,測(cè)試集;訓(xùn)練集和驗(yàn)證集有標(biāo)注,測(cè)試集沒(méi)有標(biāo)注,泛化能力在驗(yàn)證集上進(jìn)行檢驗(yàn)
劃分后的訓(xùn)練數(shù)據(jù):
X_train.shape # (404, 1) y_train.shape # (404,)
建立線性回歸模型
在sklearn下,機(jī)器學(xué)習(xí)建模非常方便:
- 實(shí)例化模型,輸入合適的超參數(shù)會(huì)使模型性能提升
- 輸入數(shù)據(jù)訓(xùn)練
- 驗(yàn)證模型
建立線性回歸模型如下:
# 創(chuàng)建線性回歸對(duì)象 regr = LinearRegression() # 使用訓(xùn)練集訓(xùn)練模型 regr.fit(X_train, y_train) # 在測(cè)試集上進(jìn)行預(yù)測(cè) y_pred = regr.predict(X_test)
注意到模型直到接收到訓(xùn)練數(shù)據(jù),才最終確定具體形式,比如發(fā)現(xiàn)輸入數(shù)據(jù)是(404,1),才確定線性回歸形式為kx+b,而不是kx+cx+b
# 畫(huà)測(cè)試數(shù)據(jù)散點(diǎn)圖 plt.scatter(X_test, y_test, color='blue') # 畫(huà)線性回歸模型對(duì)測(cè)試數(shù)據(jù)的擬合曲線 plt.plot(X_test, y_pred, color='red') # 顯示繪圖結(jié)果 plt.show()

打印模型參數(shù)有(注意區(qū)分參數(shù)和超參數(shù)):
# 打印斜率和截距
print('斜率:{}, 截距:{}'.format(regr.coef_,regr.intercept_))
結(jié)果為:
斜率:[9.11163398], 截距:-34.47557789280662
到此這篇關(guān)于初試機(jī)器學(xué)習(xí)的文章就介紹到這了,更多相關(guān)初識(shí)機(jī)器學(xué)習(xí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
python中的隨機(jī)數(shù)種子seed()用法說(shuō)明
這篇文章主要介紹了python中的隨機(jī)數(shù)種子seed()用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
使用Python的turtle模塊繪制櫻花樹(shù)的代碼示例
Python的turtle模塊是一個(gè)直觀的圖形化編程工具,讓用戶通過(guò)控制海龜在屏幕上的移動(dòng)來(lái)繪制各種形狀和圖案,在接下來(lái)的文章中,我將通過(guò)一個(gè)生動(dòng)的例子——繪制一幅櫻花樹(shù)圖畫(huà)——來(lái)深入探討turtle模塊的實(shí)用性,需要的朋友可以參考下2024-04-04
python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(八):XML生成與解析(DOM、ElementTree)
DOM是Document Object Model的簡(jiǎn)稱,XML 文檔的高級(jí)樹(shù)型表示。該模型并非只針對(duì) Python,而是一種普通XML 模型。Python 的 DOM 包是基于 SAX 構(gòu)建的,并且包括在 Python 2.0 的標(biāo)準(zhǔn) XML 支持里2014-06-06
完美解決python中ndarray 默認(rèn)用科學(xué)計(jì)數(shù)法顯示的問(wèn)題
今天小編就為大家分享一篇完美解決python中ndarray 默認(rèn)用科學(xué)計(jì)數(shù)法顯示的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
如何使用python數(shù)據(jù)處理解決數(shù)據(jù)沖突和樣本的選取
這篇文章主要介紹了如何使用python數(shù)據(jù)處理解決數(shù)據(jù)沖突和樣本的選取,其中主要包括 實(shí)際業(yè)務(wù)數(shù)據(jù)沖突、樣本選取問(wèn)題、數(shù)據(jù)共線性等思路2021-08-08
Python匿名函數(shù)/排序函數(shù)/過(guò)濾函數(shù)/映射函數(shù)/遞歸/二分法
這篇文章主要介紹了Python匿名函數(shù)/排序函數(shù)/過(guò)濾函數(shù)/映射函數(shù)/遞歸/二分法 ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06

