【我的python机器学习之路·3】多元线性回归与超市盈利预测

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33434901/article/details/82353041

本系列日记GitHub:

https://github.com/zhengyuv/MyPyMLRoad

欢迎follow和star。

       多元线性回归寻找的线性方程是在两个及以上的自变量和因变量之间构建关系。多元线性回归的实现步骤和简单线性回归很相似,在评价部分有所不同。公式为:

                                           y=b_{0}+b_{1}x_{1}+b_{2}x_{2}+......+b_{n}x_{n}

       若要做一个成功的多元线性回归,确认一些前提是很必要的:

①线性:特征值和预测值必须是线性相关的。

②保持误差项的方差齐性(常数方差):误差项的分散(方差)必须等同。参考:https://www.sohu.com/a/197715883_655370

③多元正态分布:多元回归假定残差符合正态分布。参考:https://www.zhihu.com/question/35589156https://www.zhihu.com/question/268459408/answer/337920994

④缺少多重共线性:假设数据有极少甚至没有多重共线性。当特征不是相互独立时,会引发多重共线性。

       避免虚拟变量陷阱。虚拟变量陷阱是指两个及以上变量之间高度相关的情形。简言之,就是存在一个能够被其他变量预测出的变量。例如:假使我们舍弃男性类别,那么,该类别也可以通过女性类别来定义,反之亦然。解决虚拟变量陷阱的方法是,类别变量减去一:假如有m个类别,那么在模型构建时取m-1个虚拟变量,减去的那个变量可以看作是参照值。D_{2}=1-D_{1}:y=b_{0}+b_{1}x_{1}+b_{2}x_{2}+b_{3}D_{1}。参考:https://zhuanlan.zhihu.com/p/26640957

注意:过多的变量可能会降低模型的精确度,尤其是如果存在一些对结果无关的变量,或者存在对其他变量造成很大影响的变量时。选择合适变量的方法一般有:向前选择法、向后选择法、向前向后法。

数据集:

4个特征,50条数据。

代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Sep  3 18:50:12 2018

@author: zhengyuv
"""

import pandas as pd
#import numpy as np
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

dataset = pd.read_csv('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)

regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)

Y_pred = regressor.predict(X_test)

print("R2系数为:", r2_score(Y_test, Y_pred))

输出结果:

R2系数为: 0.9347068473282966

其中r2系数在之前的博文中总结过:https://blog.csdn.net/qq_33434901/article/details/82259308

遇到点小问题:X,Y在取值时如果不用.values,在labelencoder部分会报错,因为不取values时X格式为DataFrame,无法进行切片操作。

猜你喜欢

转载自blog.csdn.net/qq_33434901/article/details/82353041