天天看点

Python 数据分析实例——回归分析

作者:昌华量化
Python 数据分析实例——回归分析

线性回归是一种有监督的学习算法,它介绍自变量和因变量之间的线性相关关系,分为一元线性回归和多元线性回归。一元线性回归是一个自变量和一个因变量间的回归,可以看成是多元线性回归的特例。线性回归可以用来预测和分类,从回归方程可以看出自变量和因变量的相互影响关系。

1.线性回归模型

Python 数据分析实例——回归分析

对于线性回归的模型假定如下:

(1)误差项的均值为0,且误差项与解释变量之间线性无关。

Python 数据分析实例——回归分析

(2)误差项是独立同分布的,即每个误差项之间相互独立且每个误差项的方差是相等的。

(3)解释变量之间线性无关。

(4)正态性假设,即误差项是服从正态分布的。

以上的假设是建立回归模型的基本条件,所以对于回归结果要一一进行验证,如果不满足假定,就要进行相关的修正。

2.模型的参数求解

(1)矩估计

一般是通过样本矩来估计总体的参数,常见的是用样本的一阶原点矩来估计总体的均值,用二阶中心矩来估计总体的方差。

(2)最小二乘估计

最小二乘估计法,又称最小平方法,是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘估计法可以简便地求得未知的数据,并使得这些数据与实际数据之间误差的平方和为最小。

(3)极大似然估计

极大似然估计是基于概率的思想,要求样本的概率分布是已知的,参数估计的值使得大量样本发生的概率最大,用似然函数来度量,似然函数是各个样本的密度函数的乘积,为方便求解其导数,加负号求解极小值,得到参数的估计结果。

3.用Python实现线性回归

目前使用Python较多,而Python中远近闻名的机器学习库要数Scikit-Learn了。这个库优点很多,简单易用,接口抽象得非常好。这里封装其中的很多机器学习算法,然后进行一次性测试,从而便于分析取优。当然,针对具体算法,超参调优也非常重要。

【例1】

下面利用线性回归算法预测波士顿的房价。波士顿房价数据集包含波士顿郊区住房价值的信息。波士顿数据集是Scikit-Learn的内置数据集,可以直接拿来使用。

#Python库导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
import matplotlib.font_manager as fm
#数据获取和理解
boston = load_boston()
print(boston.keys())           

输出:

dict_keys(['data', 'target', 'feature_names', 'DESCR'])
#波士顿数据集506个样本,14个特征
print(boston.data.shape)           

输出:

(506, 13)
#数据集列名
print(boston.feature_names)           

输出:​

['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO' 'B'
'LSTAT']
#波士顿数据集描述
bos = pd.DataFrame(boston.data)
print(bos.head())           

输出:

Python 数据分析实例——回归分析
Python 数据分析实例——回归分析

输出:

Python 数据分析实例——回归分析

RM和PRICE的关系散点图如图1所示。

Python 数据分析实例——回归分析

图1 RM和PRICE的关系散点图​

#数据模型应用—预测房价
lm.predict(X)[0:5]
#预测
mse = np.mean((bos.PRICE - lm.predict(X)) ** 2)
print(mse)           

输出:

21.897779217687496           

使用.DESCR探索波士顿数据集,业务目标是预测波士顿郊区住房的房价,使用Scikit-Learn针对整个数据集拟合线性回归模型,并计算均方误差。