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()
结果如图:
上一篇: spring boot开发基础代码生成