100-Days-Of-ML-Code 评注版(Day 3)
Day3_Multiple_Linear_Regression(多元线性回归)
本文引用自 Multiple_Linear_Regression, 对其中内容进行了评注与补充说明。
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。线性回归是回归分析中最为常用的一种方法,线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为\(y=w \times x+e\),e为误差服从均值为0的正态分布。回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
导入数据
导入数据并划分出训练数据库与测试数据集。
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])
onehotencoder = OneHotEncoder(categorical_features = [3])
X = onehotencoder.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)
其他
需要说明的是,这样简单的做法不是十分正确的,进行线性回归后还要进行假设验证、残差分析,sklearn对这方面支持的并不好,进行严谨的回归分析,还是向大家推荐R。
共线性
假设有k个自变量的多元线性回归模型: \(y=w_{1} \times x_{1} + w_{2} \times x_{2} + \cdots + w_{3} \times x_{3} + e\)。常常出现各变量之间存在线性相关问题,比如\(x_{3} = x_{2} + x_{1} + e\)。带来的问题是,当\(x_{1}\)、\(x_{2}\)、\(x_{3}\)微小的变化可能带来输出y巨大的变化,而其他非变量的改变可能对y没有什么大的影响,这会影响模型的可解释性,因此需要消除共线性问题。
多重共线性是使用线性回归算法时经常遇到的一个问题。在其他算法中,例如决策树和贝叶斯,前者的建模过程是逐步递进,每次拆分只有一个变量参与,这种建模机制含有抗多重共线性干扰的功能;后者干脆假定变量之间是相互独立的,因此从表面上看,也没有多重共线性的问题。但是对于回归算法,不论是一般回归,逻辑回归,或存活分析,都要同时考虑多个预测因子,因此多重共线性是不可避免需要面对的,在很多时候,多重共线性是一个普遍的现象。在构造预测模型时如何处理多重共线性是一个比较微妙的议题。既不能不加控制,又不能一刀切,认为凡是多重共线性就应该消除。通常处理共线性问题采用以下几种方法:
- 逐步回归
- 岭回归
- lasso回归
参考资料
[2]: 干货 :这7种回归分析技术 学了不后悔
[3]: 对于多重共线性的简单理解
---- 科学前进一步,宗教后退一步,科学再进一步,宗教又退后一步,但是科学解决了有限问题,宗教最后总是无限。