欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

100 Days Of ML Code 学习笔记-Day 3

程序员文章站 2024-02-27 18:16:51
...

多元线性回归

先看下数据:50_Startups.csv,相应的数据可以在:https://github.com/Avik-Jain/100-Days-Of-ML-Code/blob/master/datasets/50_Startups.csv中下载(右击“Raw”然后另存为即可),多元线性回归方程式:y=b0+b1x1+b2x2+…+bnxn

回归分析的前提假设
假设一:线性(Linearity),自变量和因变量的关系是线性的;
假设二:同方差性(Homoscedasticity),误差项方差应是常数;
假设三:多元正态性(Multivariate Normality),误差项符合正态分布;
假设四:缺乏多重共线性(Lack of Multicollinearity),自变量间相互独立。

虚拟变量陷阱
分类变量不是numeric的,所以要将变量转换成虚拟变量,比如男和女,在回归模型中,“性别”这个变量,可虚拟出“男”和”女”两个变量,男性的话“男”值为1,”女”值为0;女性的话“男”值为0,”女”值为1;这里所说的虚拟变量陷阱是两个或多个变量高度相关的情况,简单地说,一个变量可以从其他变量中预测出来,那么这里就有一个重复的类别:如果我们去掉了男性类别(零女性值表示男性,反之亦然)。所以虚拟变量要比实际变量的种类少一个。

1.数据预处理:参见Day 1;

import numpy
import pandas
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.model_selection import train_test_split

dataset = pandas.read_csv('/Users/agnes/Downloads/100Days/50_Startups.csv')
X = dataset.iloc[:,:-1].values
Y = dataset.iloc[:,4].values

labelencoder = LabelEncoder()
X[:,3] = labelencoder.fit_transform(X[:,3])
onehotencoder = OneHotEncoder(categorical_features=[3])
X = onehotencoder.fit_transform(X).toarray()

X = X[:,1:] #这一步就是将虚拟变量减少了一个,避免虚拟变量陷阱

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.预测测试集的结果:

#会生成10组预测值
Y_pred = regressor.predict(X_test)

#arange(10),会生成数组([0,1,2,3,4,5,6,7,8,9]),作为X值,生成10组对比值
plt.scatter(numpy.arange(10),Y_test, color = 'red',label='Y_test')
plt.scatter(numpy.arange(10),Y_pred, color = 'blue',label='Y_pred')

#这里的legend函数就是将设置的标签显示出来
plt.legend(loc=2)
plt.show()

结果如图:
100 Days Of ML Code 学习笔记-Day 3