2017年8月23日 星期三

機器學習_ML_LinearRegression

機器學習_ML_LinearRegression

原文連結
簡單線性迴歸對於離群值很敏感,對離群值的處理除了刪除之外,也可以透過RANSACRegressor來處理。
透過scikit-learn來執行LinearRegression的話,是無法透過梯度下降來求解的。
這部份如果有興趣研究的話,也可以到github去看程式碼!
或是參考同好的博客
基本上簡單線性迴歸就是我們國高中所學的線性方程式
y=ax+b
a就是求出來的斜率,而b就是x=0的時候的截距,
而預測的部份其實就是套公式去求解而以!

IMPORT

from sklearn.linear_model import LinearRegression

CLASS

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

參數說明

copy_X

default True {True, False}

fit_intercept

是否計算模型截距

n_jobs

default 1
CPU的核心使用數,設定-1代表火力全開。

normalize

default False {True, False}
當fit_intercept=False的時候,此參數將被忽略。
True:X會做L2的正規化

方法

fit

fit(X, y, sample_weight=None)
適合、訓練該模型

get_params

get_params(deep=True)
取得模型參數

predict

使用適合後的模型去預測,可放入單值也可以放入陣列。
predict(X)

score

score(X, y, sample_weight=None)
決定系數R2

跟透過r2_score計算出的值相同,愈接近1的值代表愈適合!
from sklearn.metrics import r2_score
r2_score(y_train, y_train_pred)

set_params

設定模型參數

屬性

coef_

斜率

intercept_

截距

範例

用波士頓房地產來做範例
import pandas as pd
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data', header=None, sep='\s+')

df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 
              'NOX', 'RM', 'AGE', 'DIS', 'RAD', 
              'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
#  驗證一下資料有沒有進來
df.head()

x = df[['RM']].values
y = df['MEDV'].values

from sklearn.linear_model import LinearRegression
slr = LinearRegression()
slr.fit(x, y)
slr.coef_[0]  #  斜率
slr.intercept_  #  截距
slr.score(x, y)  #  r2
實務上不會全數據一起導入,只是一個簡單的sample,如需要,可以透過import train_test_split來做數據分割
from sklearn.model_selection import train_test_split
X = df[['RM']].values
y = df['MEDV'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

沒有留言:

張貼留言