机器学习与数据挖掘人工智能/模式识别/机器学习精华专题Pythoner集中营

机器学习 Day 3 | Multiple Linear Reg

2018-08-10  本文已影响1人  raphah

机器学习第三天 多元线性回归

数据集下载地址
https://www.xiehaoo.com/media/record/pinke/2018/08/50_Startups.csv

多元线性回归尝试通过用一个线性方程来适配观测数据,这个线性方程是在两个以上(包括两个)的特性和响应之间构建的一个关系。多元线性回归的实现步骤和简单线性回归很相似,在评价部分有所不同。你可以用它来找出在预测结果上哪个因素影响力最大,以及不同变量是如何相互关联的。

设想
想要有一个成功的回归分析,确认这些假定很重要。

1、线性:自变量和因变量的关系应该是线性的(即特征值和预测值是线性相关的)

2、保持误差项的方差齐性(常数方差):误差项的分散(方差)必须等同

3、多元正态分布:多元回归假定残差符合正态分布。

4、缺少多重共线性:假设数据有极少甚至没有多重共线性。当特征(或自变量)不是相互独立时、会引发多重共线性。

虚(拟)变量
在多元回归模型中、当遇到数据集是非数值数据类型时,使用分类数据是一个非常有效的方法。
分类数据、是指反映(事物)类别的数据,是离散数据,其数值个数(分类属性)有限(但可能很多)且值之间无序。
比如,按性别分为男、女两类。在一个回归模型中,这些分类值可以用虚变量来表示,变量通常取诸如1或0这样的值,来表示肯定类型或否定类型。

虚拟变量陷阱
虚拟变量是指两个以上(包括两个)变量之间高度相关的情形。简而言之,就是存在一个能够被其他变量预测出的变量。我们举一个存在重复类别(变量)的直观例子:假使我们舍弃男性类别,那么,该类别也可以通过女性类别来定义(女性值为0时,表示男性、为1市表示女性),反之亦然。
解决虚拟变量陷阱的方法是,类别变量减去一:假如有m个类别,那么在模型构建时取m-1个虚拟变量,减去的那个变量可以看作是参照值。

注意
过多的变量可能会降低模型的精确度,尤其是如果存在一些对结果无关的变量,或者存在对其他变量造成很大影响的变量时。这里介绍一些选择合适变量的方法:
1、向前选择法
2、向后选择法(也称 向后剔除法/向后消元法)
3、向前向后法:即结合了上面说的向前法和向后法,先用向前法筛选一遍,再用向后法筛选一遍,直到最后无论怎么筛选模型变量都不再发生变化,就算是结束了

第一步:数据预处理
1.导入相关库 Pandas、Numpy、Sklearn 、Matplotlib
2.导入csv数据集
3.检查缺失数据
4.划分数据集
5.有必要的话,编辑虚拟变量并注意避免虚拟变量陷阱
6.特征缩放用简单线性回归模型的相关库实现

数据预处理通过前两天的学习已经熟悉了需要哪些步骤,就不单独一列一列分析了

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression

dataset = pd.read_csv('/Users/xiehao/Desktop/100-Days-Of-ML-Code-master/datasets/50_Startups.csv')

"""
数据表格

R&D Spend   Administration  Marketing Spend State   Profit
165349.2    136897.8    471784.1    New York    192261.83
162597.7    151377.59   443898.53   California  191792.06
153441.51   101145.55   407934.54   Florida     191050.39
144372.41   118671.85   383199.62   New York    182901.99
142107.34   91391.77    366168.42   Florida     166187.94
131876.9    99814.71    362861.36   New York    156991.12
134615.46   147198.87   127716.82   California  156122.51
130298.13   145530.06   323876.68   Florida     155752.6
120542.52   148718.95   311613.29   New York    152211.77
123334.88   108679.17   304981.62   California  149759.96
101913.08   110594.11   229160.95   Florida     146121.95
100671.96   91790.61    249744.55   California  144259.4
93863.75    127320.38   249839.44   Florida     141585.52
91992.39    135495.07   252664.93   California  134307.35
119943.24   156547.42   256512.92   Florida     132602.65
114523.61   122616.84   261776.23   New York    129917.04
78013.11    121597.55   264346.06   California  126992.93
94657.16    145077.58   282574.31   New York    125370.37
91749.16    114175.79   294919.57   Florida     124266.9
86419.7     153514.11   0           New York    122776.86
76253.86    113867.3    298664.47   California  118474.03
78389.47    153773.43   299737.29   New York    111313.02
73994.56    122782.75   303319.26   Florida     110352.25
67532.53    105751.03   304768.73   Florida     108733.99
77044.01    99281.34    140574.81   New York    108552.04
64664.71    139553.16   137962.62   California  107404.34
75328.87    144135.98   134050.07   Florida     105733.54
72107.6     127864.55   353183.81   New York    105008.31
66051.52    182645.56   118148.2    Florida     103282.38
65605.48    153032.06   107138.38   New York    101004.64
61994.48    115641.28   91131.24    Florida     99937.59
61136.38    152701.92   88218.23    New York    97483.56
63408.86    129219.61   46085.25    California  97427.84
55493.95    103057.49   214634.81   Florida     96778.92
46426.07    157693.92   210797.67   California  96712.8
46014.02    85047.44    205517.64   New York    96479.51
28663.76    127056.21   201126.82   Florida     90708.19
44069.95    51283.14    197029.42   California  89949.14
20229.59    65947.93    185265.1    New York    81229.06
38558.51    82982.09    174999.3    California  81005.76
28754.33    118546.05   172795.67   California  78239.91
27892.92    84710.77    164470.71   Florida     77798.83
23640.93    96189.63    148001.11   California  71498.49
15505.73    127382.3    35534.17    New York    69758.98
22177.74    154806.14   28334.72    California  65200.33
1000.23     124153.04   1903.93     New York    64926.08
1315.46     115816.21   297114.46   Florida     49490.75
0           135426.92   0           California  42559.73
542.05      51743.15    0           New York    35673.41
0           116983.8    45173.06    California  14681.4

"""

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)

第二步:在训练集上训练模型
这一步和简单线性回归模型处理方式完全一样。
用sklearn.linear_model库的LinearRegression类,在数据集上训练模型。首先,创建一个LinearRegression的对象regressor,接着用LinearRegression类的fit()方法,用对象regressor在数据集上进行训练。

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

第三步:预测结果
在测试集上进行预测,并观察结果。我们将把输出结果保存在向量Y_pred中。在上一步regressor对象使用predict()方法来预测结果

y_pred = regressor.predict(X_test)
>>print(y_pred)
 [ 103015.20159797  132582.27760815  132447.73845175   71976.09851258
 178537.48221054  116161.24230165   67851.69209676   98791.73374688
 113969.43533012  167921.0656955 ]

感谢原作者 Avik-Jain 以及 zhyongquan的汉化

上一篇下一篇

猜你喜欢

热点阅读