-----代码传送门----- -----数据传送门-----
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)
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
y_pred = regressor.predict(X_test)
简单线性回归:影响Y的因素唯一,只有一个。 多元线性回归:影响Y的因数不唯一,有多个。
与一元线性回归一样,多元线性回归自然是一个回归问题。
一元线性回归方程:Y=aX+b。 多元线性回归是:Y=aX1+bX2+cX3+…+nXn。
相当于我们高中学的一元一次方程,变成了n元一次方程。因为y还是那个y。只是自变量增加了。
在实际的机器学习的应用任务中,特征有时候并不总是连续值,有可能是一些分类值,如性别可分为“male”和“female”。在机器学习任务中,对于这样的特征,通常我们需要对其进行特征数字化,如下面的例子:
有如下三个特征属性:
通过LabelEncoder将其数字化:
再用OneHotEncoder进行编码:
from sklearn.preprocessing import OneHotEncoder
enc = 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.]]
解释:对于输入数组,这依旧是把每一行当作一个样本,每一列当作一个特征。
可以简单理解为“male”“US”“Safari”经过LabelEncoder与OneHotEncoder的编码就变成了:[[1. 0. 0. 1. 0. 0. 0. 0. 1.]]
更多OneHot编码知识可前往:scikit-learn 中 OneHotEncoder 解析
toarray():将列表转化为数组
Python原生没有数组的概念,这点不同于Java之类的面向对象语言。Python中原生的列表使用起来很像数组,但是两者有本质的区别
列表与数组的最本质的区别:列表中的所有元素的内存地址可以不是连续的,而数组是连续的。
更详细的解释:Python中列表与数组的区别
虚拟变量陷阱是指两个以上(包括两个)变量之间高度相关的情形。简而言之,就是存在一个能被其他变量预测出的变量,举一个存在重复类别(变量)的直观例子:假使我们舍弃男性类别,那么该类别也可以通过女性类别来定义(女性值为0时,表示男性,为1时,表示女性),反之亦然。
虚拟变量陷阱这里就简单了解,后面再深入讨论。