机器学习第3天:多元线性回归
文章目錄
- 一、具體實現步驟
- 第1步:數據預處理
- 導入庫
- 導入數據集
- 將類別數據數字化
- 躲避虛擬變量陷阱
- 拆分數據集為訓練集和測試集
- 第2步: 在訓練集上訓練多元線性回歸模型
- 第3步:在測試集上預測結果
- 二、知識點詳解
- 1. 關于多元線性回歸
- 2. 關于OneHotEncoder()編碼
- 3. 關于toarray()
- 4. 虛擬變量陷阱
----- 代碼傳送門-----
----- 數據傳送門-----
一、具體實現步驟
第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]) #表示對第4個特征進進行OneHot編碼 onehotencoder = OneHotEncoder(categorical_features = [3]) X = onehotencoder.fit_transform(X).toarray()躲避虛擬變量陷阱
X = X[: , 1:]拆分數據集為訓練集和測試集
from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)第2步: 在訓練集上訓練多元線性回歸模型
from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train, Y_train)第3步:在測試集上預測結果
y_pred = regressor.predict(X_test)二、知識點詳解
1. 關于多元線性回歸
簡單線性回歸:影響Y的因素唯一,只有一個。
多元線性回歸:影響Y的因數不唯一,有多個。
與一元線性回歸一樣,多元線性回歸自然是一個回歸問題。
一元線性回歸方程:Y=aX+b。
多元線性回歸是:Y=aX1+bX2+cX3+…+nXn。
相當于我們高中學的一元一次方程,變成了n元一次方程。因為y還是那個y。只是自變量增加了。
2. 關于OneHotEncoder()編碼
在實際的機器學習的應用任務中,特征有時候并不總是連續值,有可能是一些分類值,如性別可分為“male”和“female”。在機器學習任務中,對于這樣的特征,通常我們需要對其進行特征數字化,如下面的例子:
有如下三個特征屬性:
- 性別:[“male”,“female”]
- 地區:[“Europe”,“US”,“Asia”]
- 瀏覽器:[“Firefox”,“Chrome”,“Safari”,“Internet Explorer”]
通過LabelEncoder將其數字化:
- 性別:[0,1]
- 地區:[0,1,2]
- 瀏覽器:[0,1,2,3]
再用OneHotEncoder進行編碼:
from sklearn.preprocessing import OneHotEncoderenc = OneHotEncoder() enc.fit([[0, 0, 3],[1, 1, 0],[0, 2, 1],[1, 0, 2]]) """ 如果不加 toarray() 的話,輸出的是稀疏的存儲格式,即索引加值的形式, 也可以通過參數指定 sparse = False 來達到同樣的效果 """ ans = enc.transform([[0, 1, 3]]).toarray() print(ans) # 輸出 [[ 1. 0. 0. 1. 0. 0. 0. 0. 1.]]解釋:對于輸入數組,這依舊是把每一行當作一個樣本,每一列當作一個特征。
- 我們先來看第一個特征,即第一列 [0,1,0,1],也就是說它有兩個取值 0 或者 1,那么 one-hot 就會使用兩位來表示這個特征,[1,0] 表示 0, [0,1] 表示 1,在上例輸出結果中的前兩位 [1,0…] 也就是表示該特征為 0。
- 第二個特征,第二列 [0,1,2,0],它有三種值,那么 one-hot 就會使用三位來表示這個特征,[1,0,0] 表示 0, [0,1,0] 表示 1,[0,0,1] 表示 2,在上例輸出結果中的第三位到第六位 […0,1,0,0…] 也就是表示該特征為 1。
- 第二個特征,第三列 [3,0,1,2],它有四種值,那么 one-hot 就會使用四位來表示這個特征,[1,0,0,0] 表示 0, [0,1,0,0] 表示 1,[0,0,1,0] 表示 2,[0,0,0,1] 表示 3,在上例輸出結果中的最后四位 […0,0,0,1] 也就是表示該特征為 3
可以簡單理解為“male”“US”“Safari”經過LabelEncoder與OneHotEncoder的編碼就變成了:[[1. 0. 0. 1. 0. 0. 0. 0. 1.]]
更多OneHot編碼知識可前往:scikit-learn 中 OneHotEncoder 解析
3. 關于toarray()
toarray():將列表轉化為數組
Python原生沒有數組的概念,這點不同于Java之類的面向對象語言。Python中原生的列表使用起來很像數組,但是兩者有本質的區別
列表與數組的最本質的區別:列表中的所有元素的內存地址可以不是連續的,而數組是連續的。
更詳細的解釋:Python中列表與數組的區別
4. 虛擬變量陷阱
虛擬變量陷阱是指兩個以上(包括兩個)變量之間高度相關的情形。簡而言之,就是存在一個能被其他變量預測出的變量,舉一個存在重復類別(變量)的直觀例子:假使我們舍棄男性類別,那么該類別也可以通過女性類別來定義(女性值為0時,表示男性,為1時,表示女性),反之亦然。
虛擬變量陷阱這里就簡單了解,后面再深入討論。
總結
以上是生活随笔為你收集整理的机器学习第3天:多元线性回归的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习100天:专栏目录
- 下一篇: 机器学习第4天:线性回归及梯度下降