100-Days-Of-ML-Code 学习笔记,第三天,任务为实现简单的多元线性回归:
今天发现了这个项目的中文版的github网址:https://github.com/Avik-Jain/100-Days-of-ML-Code-Chinese-Version,哈哈哈,感觉自己的四级水平又行了。今天的学习任务如下:
(1)数据预处理 (2)模型训练预测 (3)效果评价
首先介绍下多元线性回归,直接上图:
跟上一节学的线性回归相似,模型前提假设如下:
在做回归预测时需要分析的数据往往是多变量的,那么我们在做多元回归时就需要特别注意了解我们的数据是否能够满足做多元线性回归分析的前提条件.
应用多重线性回归进行统计分析时要求满足哪些条件呢?
总结起来可用四个词来描述:线性、独立、正态、齐性.
(1)自变量与因变量之间存在线性关系
这可以通过绘制”散点图矩阵”进行考察因变量随各自变量值的变化情况。如果因变量Y_i 与某个自变量X _i 之间呈现出曲线趋势,可尝试通过变量变换予以修正,常用的变量变换方法有对数变换、倒数变换、平方根变换、平方根反正弦变换等。
(2)各观测间相互独立
任意两个观测残差的协方差为0 ,也就是要求自变量间不存在多重共线性问题。对于如何处理多重共线性问题,请参考《多元线性回归模型中多重共线性问题处理方法》。
(3)残差e 服从正态分布N(0,σ^2) 。其方差σ^2 = var (e_i) 反映了回归模型的精度。σ 越小,用所得到回归模型预测y的精确度愈高。
(4) e 的大小不随所有变量取值水平的改变而改变,即方差齐性。
import pandas as pd
import numpy as np
#加载数据集
path = "H:/100-Days-Of-ML-Code-master/datasets/50_Startups.csv"
df = pd.read_csv(path)
x = df.values[:,:-1]
y = df.values[:,-1]
print(x)
#数据集预处理
from sklearn.preprocessing import OneHotEncoder as one
from sklearn.preprocessing import LabelEncoder as lab
x[:,3] = lab().fit_transform(x[:,3])
x = one(categorical_features = [3]).fit_transform(x).toarray()
#去除相关变量
X = x[: , 1:]
#数据集分割
from sklearn.cross_validation 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)
#结果展示
show = pd.DataFrame()
show["y_real"] = Y_test
show["y_pred"] = y_pred
print(show)
emmmm,我对去除相关变量跟不去除的分别跑了两次,发现结果差距不大:
额。。。。也不是说差距不大,是直接没影响的好吗。。。。是不是我哪里搞错了。