程序员机器学习和人工智能入门

回归拟合(一)

2017-11-01  本文已影响64人  那未必

基础准备

首先需要安装 statsmodels:

pip install statsmodels

statsmodels是一个python的统计分析包,有很多统计模型可以使用。编程时,习惯的引入方式是:

import statsmodels.api as sm

一元线性回归拟合

创建实验数据

为了验证方便,首先自己创建一组散点,分布在 y=1+10x 直线的周围。

import statsmodels.api as sm
import numpy as np

# 先自己创造一组随机坐标点
# 坐标点在 y=1+10x 附近
# 模拟策略:
# 设想有若干个 y=kx+m, k=10, m=1,
# x 是某区间中的一组随机数,
# 然后算出 y
# 用矩阵相乘的方式来表达这个过程比较方便

nsample=100
x=np.linspace(0,10,nsample)
X=sm.add_constant(x)
beta=np.array([1,10])
# 添加一点随机扰乱值
e=np.random.normal(size=nsample)
# 两个矩阵相乘,得到y值
y=np.dot(X,beta)+e

拟合数据

这才是本文的重点。如果已经有了前面创建的 y、 X数据,现在只需要用 sm.OLS 模型拟合一下。总共就两步:第一、创建模型;第二、fit 数据。

model=sm.OLS(y,X)
result=model.fit()

打印一下拟合结果:

print result.params

输出:

[  0.85704777  10.00038404]

也就是 m=0.86, k=10.00

还可以输出更详细的拟合结果报告:

print result.summary()
拟合结果

输出结果中,coef 列是 k和m值,而 std err 列则表达了相关性,可以认为是 1-相关系数。

图示化展现

y_fitted=result.fittedvalues
fig,ax=plt.subplots(figsize=(8,6))
ax.plot(x,y,'o',label='data')
ax.plot(x,y_fitted,'r--.',label='OLS')
ax.legend(loc='best')
拟合图像
上一篇下一篇

猜你喜欢

热点阅读