機器學習入坑指南(四):多元線性迴歸

在學習了「簡單線性迴歸」以後,咱們進一步學習應用更爲普遍的多元線性迴歸,並使用 Python 代碼來實現它。python

1、理解原理

多元線性迴歸是對簡單線性迴歸的推廣,同時有着不一樣於簡單線性迴歸的特性。git

1 概念

多元線性迴歸(Multiple Linear Regression)嘗試經過已知數據找到一個線性方程來描述兩個及以上的特徵(自變量)與輸出(因變量)之間的關係,並用這個線性方程來預測結果。github

多元線性迴歸的數學形式以下:dom

$$y = b_0 + b_1x_1 + b_2x_2 ...+b_nx_n + u_t$$學習

式中 $u_t(t= 1,2,...,n)$ 爲隨機項偏差。測試

應用多元線性迴歸時,咱們須要關注不一樣變量對預測結果的影響,以及不一樣的變量之間有什麼聯繫。編碼

2 使用多元線性迴歸分析的前提

線性:自變量和因變量線性相關.net

同方差性:隨機偏差項的方差應爲常數,也就是說樣本殘差的平方 $e_t^2$ 不隨自變量的變化而變化code

多元正態:殘差應符合正態分佈orm

低多重共線性:使用多元線性迴歸時,若是特徵(自變量)之間高度相關,會使迴歸估計不許確,稱爲多重共線性。咱們須要保證數據沒有或具備較低的多重共線性

3 變量的選擇

使用太多的變量可能會致使模型變得不精確,尤爲是存在對輸出結果沒有影響或者對其它變量有較大影響的變量時。選擇變量能夠採用如下幾種方法:

  • 向前選擇法:從沒有變量開始,使用某種標準,選擇對擬合結果改進最大的變量,重複這個過程直到增長新的變量對結果沒有明顯的改善。
  • 向後剔除法:從具備多個候選變量開始,使用某種標準,評估去除變量對擬合結果的負面影響,逐個去除影響最小的變量,直到去除每一個變量都會對結果形成重要的負面影響。
  • 雙向對比法

4 虛擬變量

要想在迴歸模型中使用非數值數據類型,能夠把它們視爲分類數據

分類數據,是指反應事物類型的離散數據(固定且無序),好比性別(男/女)。在模型中,咱們能夠用虛擬變量來表示這種數據。虛擬變量一般使用 一、0 這樣的值來表示確定或否認的含義。

5 虛擬變量陷阱

虛擬變量陷阱指兩個或多個變量之間高度相關的情形。簡單的說就是一個變量能夠經過其它變量預測。例如男性類別能夠經過女性類別判斷(女性值爲 0 時,表示男性),因此對於男女問題,變量應該只有一元。

假設有 m 個相互關聯的類別,爲了解決虛擬變量陷阱,能夠在模型構建時只選取 m-1 個虛擬變量。

2、代碼實現

1 數據預處理

# 導入庫
import pandas as pd
import numpy as np
# 導入數據集
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : ,  4 ].values
# 分類數據編碼
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[: , 3] = labelencoder.fit_transform(X[ : , 3])
onehotencoder = OneHotEncoder(categorical_features = [3])
X = onehotencoder.fit_transform(X).toarray()
# 躲避虛擬變量陷阱
X = X[: , 1:]
# 分割訓練集和測試集
from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)

示例數據地址:GitHub - Avik-Jain/100-Days-Of-ML-Code/datasets

此次比起前文「數據預處理」 ,多了一行躲避虛擬變量陷阱的代碼。

2 使用訓練集擬合多元線性迴歸模型

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)

3 預測結果

y_pred = regressor.predict(X_test)

歡迎關注 Evan 的博客

相關文章
相關標籤/搜索