[Python]初心者筆記11(線性回歸區分訓練資料以及測試資料,train and test data, 使用套件直接獲得現實世界數據)

[Python]初心者筆記11(線性回歸區分訓練資料以及測試資料,train and test data, 使用套件直接獲得現實世界數據)

#進行數據分析之前常要引用的函式庫
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

#將線性回歸的函式庫載入,準備要執行線性回歸
from sklearn.linear_model import LinearRegression

#當然還是要比照初心者筆記9的方式,先產生假資料
x = np.linspace(0,5,100)
y = 1.2 * x + 0.8 + 0.5 * np.random.randn(100)

#先畫圖簡單看一下長什麼樣子
plt.scatter(x,y)

#擔心overfitting的情況發生的話
#進行機器學習的時候,就需區分 訓練用data(總資料的80%) 以及 測試用data(總資料的20%),
#函數train_test_split可以幫我們自動做到,他會自動幫我們亂數取出總資料的20%,來當成測試的時候使用
#這些 測試用data 將不會參與訓練的過程!
from sklearn.model_selection import train_test_split

#train_test_split將會自動把資料分類為 x_train, x_test, y_train, y_test 這四種
#測試資料佔的比例暫訂為20%, 因此test_size = 0.2
#random_state請輸入一個隨便的數字
x_train, x_test, y_train, y_test = train_test_split(x,y,
                                                    test_size = 0.2,
                                                    random_state=87
                                                   )

#確認x_train的大小
len(x_train)

#然後把分類後的四個array轉製成80x1, 才能作訓練
#以後要是使用sklearn直接提供的真實世界的資料的話,不要再做轉置矩陣的動作!
x_train = x_train.reshape(80,1)

##以後要是使用sklearn直接提供的真實世界的資料的話,不要再做轉置矩陣的動作!
x_test.shape = (20,1)

##以後要是使用sklearn直接提供的真實世界的資料的話,不要再做轉置矩陣的動作!
y_train = y_train.reshape(80,1)

##以後要是使用sklearn直接提供的真實世界的資料的話,不要再做轉置矩陣的動作!
y_test = y_test.reshape(20,1)

#首先開一台線性回歸機
regr = LinearRegression()

#以訓練資料來做訓練
regr.fit(x_train,y_train)
y_train_result = regr.predict(x_train)

#然後就可以來檢查是否機器學習出來的曲線是否跟原本的曲線接近
#這就是訓練資料產生的預測曲線
#當然自己訓練出來的曲線,一定會很相近的
plt.scatter(x_train,y_train)
plt.plot(x_train,y_train_result,'r')

#接下來拿測試資料與剛才預測出來的曲線做比較,檢查是否接近?
#注意這裡的regr.predict(x_test),帶入的參數是x_test
#這樣才是把 測試的點代入預測曲線 的方式
plt.scatter(x_test,y_test)
plt.plot(x_test,regr.predict(x_test),'r')
#看起來還蠻精準的!表示此線性回歸成功!Skikit讚!


使用套件直接取得現實世界數據:(分析波士頓房價)

#進行數據分析之前常要引用的函式庫
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

#將sklearn線性回歸的函式庫載入,準備要執行線性回歸
from sklearn.linear_model import LinearRegression

#進行機器學習的時候,就需區分 訓練用data 以及 測試用data
from sklearn.model_selection import train_test_split

#sklearn提供的現實世界的數據
#試著在import的後面按下tab按鍵
#就可以發現有 非常非常多!的現成資料可直接取得
#省得在那邊爬網了
from sklearn.datasets import load_boston

boston = load_boston()

#檢查boston下面有幾個feature_names分類
boston.feature_names

#首先先取得資料.data以及正確答案.target
X = boston.data
Y = boston.target

#當然線性回歸訓練的過程中,也是要分成訓練資料以及測試資料
#只是這次保留比較多的比例當成測試資料 = 30%
x_train, x_test, y_train, y_test = train_test_split(X,Y,
                                                    test_size = 0.3,
                                                    random_state=87
                                                   )
												   
#首先開一台線性回歸機
regr = LinearRegression()

regr.fit(x_train,y_train)
y_train_predict = regr.predict(x_train)

y_test_predict = regr.predict(x_test)

#接下來檢查是否曲線接近點
#這邊帶入的參數不太懂,跟以往學的理論不同
#先不管那麼detail囉
plt.scatter(y_test,y_test_predict)
plt.plot([0,50],[0,50],'r')
plt.xlabel("True Price")
plt.ylabel("Predicted Price")												   

參考資料:
成為python數據分析達人的第一課(自學課程)
http://moocs.nccu.edu.tw/course/123/intro