这里直线拟合需要用到statsmodels这个库;
曲线拟合需要用到np.polynomial.Chebyshev.fit()这个函数;
方差计算需要用到sklearn这个库。

首先来看直线拟合,这里拟合’600848’这只股票一年的收市的股价。

import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import talib

df=ts.get_hist_data('600848',start='2015-01-01',end='2015-12-31')
df=df.sort_index()
df.index=pd.to_datetime(df.index,format='%Y-%m-%d')
#收市股价
close= df.close
x=np.arange(0,len(close))
y=close.values
import statsmodels.api as sm
from statsmodels import regression

def regress_y(y):
    x=np.arange(0,len(y))
    x=sm.add_constant(x)
    model=regression.linear_model.OLS(y,x).fit()
    return model

model=regress_y(close)
b=model.params[0]
k=model.params[1]

y_fit=k*x+b

plt.plot(x,y)
plt.plot(x,y_fit,'r')

这里写图片描述

接着来看一下用sklearn计算偏差绝对值之和(MAE),偏差平方(MSE),偏差平方和开平方(RMSE)

from sklearn import metrics
MAE=metrics.mean_absolute_error(y,y_fit)
MSE=metrics.mean_squared_error(y,y_fit)
RMSE=np.sqrt(MSE)

最后来看一下多项式拟合,这里取得是9项:

#多项式拟合
p=np.polynomial.Chebyshev.fit(x,y,9)
y_fit_n=p(x)
plt.plot(x,y,'',x,y_fit_n,'r')

这里写图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐