Python-线性回归模型

从线性回归(Linear regression)开始学习回归分析,线性回归是最早的也是最基本的模型——把数据拟合成一条直线。数据集使用scikit-learn里的数据集boston,boston数据集很适合用来演示线性回归。boston数据集包含了波士顿地区的房屋价格中位数。还有一些可能会影响房价的因素,比如犯罪率(crime rate)。

加载数据 

from sklearn import datasets
boston = datasets.load_boston()
import pandas as pd
import warnings # 用来忽略seaborn绘图库产生的warnings
warnings.filterwarnings("ignore")
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="white", color_codes=True)
%matplotlib inline

dfdata = pd.DataFrame(boston.data,columns=boston.feature_names)
dfdata["target"] = boston.target
dfdata.head()

Python-线性回归模型

fig = plt.figure()
for i,f in enumerate(boston.feature_names):
    sns.jointplot(x=f, y="target", data=dfdata, kind='reg', size=6)

Python-线性回归模型

 

 

 

线性回归模型

用scikit-learn的线性回归非常简单
首先,导入LinearRegression类创建一个对象:

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
现在,再把自变量和因变量传给LinearRegression的fit方法:
lr.fit(boston.data, boston.target)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

开始预测

predictions = lr.predict(boston.data)

用预测值与实际值的残差(residuals)直方图分布来直观显示预测结果:

%matplotlib inline
f, ax = plt.subplots(figsize=(7, 5))
f.tight_layout()
ax.hist(boston.target-predictions,bins=40, label='Residuals Linear', color='b', alpha=.5);
ax.set_title("Histogram of Residuals")
ax.legend(loc='best');

Python-线性回归模型

 

 

 

lr.coef_

Python-线性回归模型

 

 

 Python-线性回归模型

 

 

 

def plotCofBar(x_feature,y_cof):
    x_value = range(len(x_feature))
    plt.bar(x_value, y_cof, alpha = 1, color = 'r', align="center")
    plt.autoscale(tight=True)
    plt.xticks([i for i in range(len(x_feature))],x_feature,rotation="90")
    plt.xlabel("feature names")
    plt.ylabel("cof")
    plt.title("The cof of Linear regression")
    plt.show()
plotCofBar(boston.feature_names,lr.coef_)

Python-线性回归模型

 

 

 

线性回归原理
线性回归的基本理念是找出满足 y=Xβy=Xβ 的相关系数集合 ββ ,其中 XX 是因变量数据矩阵。想找一组完全能够满足等式的相关系数很难,因此通常会增加一个误差项表示不精确程度或测量误差。因此,方程就变成了 y=Xβ+ϵy=Xβ+ϵ,其中 ϵϵ 被认为是服从正态分布且与 XX 独立的随机变量。用几何学的观点描述,就是说这个变量与 XX 是正交的(perpendicular)。可以证明 E(Xϵ)=0E(Xϵ)=0。

为了找到相关系数集合 ββ ,我们最小化误差项,这转化成了残差平方和最小化问题。

这个问题可以用解析方法解决,其解是:
Python-线性回归模型

线性回归可以自动标准正态化(normalize或scale)输入数据

lr2 = LinearRegression(normalize=True)
lr2.fit(boston.data, boston.target)

 

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=True)

 

predictions2 = lr2.predict(boston.data)
%matplotlib inline
from matplotlib import pyplot as plt
f, ax = plt.subplots(figsize=(7, 5))
f.tight_layout()
ax.hist(boston.target-predictions2,bins=40, label='Residuals Linear', color='b', alpha=.5);
ax.set_title("Histogram of Residuals")
ax.legend(loc='best');

Python-线性回归模型

 

上一篇:pyhon连接mysql数据库并建立数据库


下一篇:#Pycharm&界面控制大小自定义设置