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