深度學習詳解之初試機器學習
機器學習可應用在各個方面,本篇將在系統性進入機器學習方向前,初步認識機器學習,利用線性回歸預測波士頓房價;
原理簡介
利用線性回歸最簡單的形式預測房價,隻需要把它當做是一次線性函數y=kx+b即可。我要做的就是利用已有數據,去學習得到這條直線,有瞭這條直線,則對於某個特征x(比如住宅平均房間數)的任意取值,都可以找到直線上對應的房價y,也就是模型的預測值。
從上面的問題看出,這應該是一個有監督學習中的回歸問題,待學習的參數為實數k和實數b(因為就隻有一個特征x),從樣本集合sample中取出一對數據(xi,yi),xi代入kx+b得到輸出y^i,MSE可以衡量預測輸出與樣本標註的接近程度,所以把MSE作為這個問題的損失函數,對於共m mm個樣本的集合,損失函數計算為:J(k,b)=1i=1∑m(yi−yi)2
一般需要遍歷數據集迭代多次,才能得到一個較好的結果
波士頓房價數據集
房價預測的實現將基於sklearn(scikit-learn),sklearn中有多種數據集:
- 自帶的小數據集(packaged dataset):sklearn.datasets.load_<name>
- 可在線下載的數據集(Downloaded Dataset):sklearn.datasets.fetch_<name>
- 自定義生成的數據集(Generated Dataset):sklearn.datasets.make_<name>
首先從sklearn的數據集獲取內置數據集中的即波士頓房價數據:
from sklearn.datasets import load_boston
導入其他功能包和模塊,導入線性回歸模型:
# 使用sklearn 中的 train_test_split 劃分數據集 from sklearn.model_selection import train_test_split # 使用 sklearn 中的線性回歸模型進行預測 from sklearn.linear_model import LinearRegression # 使用 matplotlib 中的 pyplot 進行可視化 import matplotlib.pyplot as plt
加載數據集:
# 加載波士頓房價數據集,返回特征X和標簽y X, y = load_boston(return_X_y=True) X.shape # (506, 13) y.shape # (506,)
取出一個特征作為x:
# 隻取第6列特征(方便可視化):住宅平均房間數 # 註意切片區間左閉右開 X = X[:,5:6]
劃分為訓練集和測試集,測試集取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,函數形式為:
train_test_split(train_data, train_target, test_size, random_state,shuffle)
- test_size:浮點數,在0 ~ 1之間,表示測試樣本占比
- random_state:隨機種子,種子不同,每次調用時采樣的樣本不同;種子相同,每次調用時采樣一致
- shuffle = True,打亂樣本數據的順序
嚴格來說,對於有監督學習的數據集應分為訓練集,驗證集,測試集;訓練集和驗證集有標註,測試集沒有標註,泛化能力在驗證集上進行檢驗
劃分後的訓練數據:
X_train.shape # (404, 1) y_train.shape # (404,)
建立線性回歸模型
在sklearn下,機器學習建模非常方便:
- 實例化模型,輸入合適的超參數會使模型性能提升
- 輸入數據訓練
- 驗證模型
建立線性回歸模型如下:
# 創建線性回歸對象 regr = LinearRegression() # 使用訓練集訓練模型 regr.fit(X_train, y_train) # 在測試集上進行預測 y_pred = regr.predict(X_test)
註意到模型直到接收到訓練數據,才最終確定具體形式,比如發現輸入數據是(404,1),才確定線性回歸形式為kx+b,而不是kx+cx+b
# 畫測試數據散點圖 plt.scatter(X_test, y_test, color='blue') # 畫線性回歸模型對測試數據的擬合曲線 plt.plot(X_test, y_pred, color='red') # 顯示繪圖結果 plt.show()
打印模型參數有(註意區分參數和超參數):
# 打印斜率和截距 print('斜率:{}, 截距:{}'.format(regr.coef_,regr.intercept_))
結果為:
斜率:[9.11163398], 截距:-34.47557789280662
到此這篇關於初試機器學習的文章就介紹到這瞭,更多相關初識機器學習內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章,希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found