簡單回顧
在ML_Day2(機器學習種類)有提Regression與classificatoin的差異。所謂的線性迴歸(Linear Regression),簡單來說就是,如果我們要找的function,能夠用線性組表示,並且直接輸出一個數值。

 
如果今天搜集十隻神奇寶貝,把每一隻的feature都進去我們的linear model做預測,我們可以得到linear regression的圖。並且希望能找到一個linear model能讓實際上與預測出來的誤差越小越好。

Loss Function:
那如何找到比較好的linear model,我們希望能讓誤差越小越好。所以必須訂一個loss function來衡量參數的好壞。這邊介紹一個比較常用的方法,square error measure。如果linear model丟進去loss function的誤差越大越不好;反之,loss function的誤差越小越好。

Gradient Descent:
計算完loss function之後,我們要如何衡量model的好壞?上面有提到,如果loss function越小越好。以我們的function來說就是找到w、b能讓loss function最小,所以我們必須對loss function做偏微分(切線斜率)就是找極大極小值的概念,找到loss function斜率為0的地方,參數就無法再做更新了。偏微分前面有一個常數稱為learning rate,如果值越大,代表每次更新的幅度越大;反之,如果值越小,代表每次更新的幅度越小。

sklear-learn數據實作Linear Regression:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score, accuracy_score
def main():
    diabetes = datasets.load_diabetes()
    X = diabetes.data[:, np.newaxis, 2]
    print("Data shape: ", X.shape)  
    x_train, x_test, y_train, y_test = train_test_split(
        X, diabetes.target, test_size=0.1, random_state=4)
    regr = linear_model.LinearRegression()
    regr.fit(x_train, y_train)
    y_pred = regr.predict(x_test)
    plt.scatter(x_test, y_test, color='black')
    plt.plot(x_test, y_pred, color='blue', linewidth=3)
    plt.show()
if __name__ == '__main__':
    main()
