Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带股票数据的Python线性回归线-获得y轴上的收盘价_Python_Regression_Line_Stock - Fatal编程技术网

带股票数据的Python线性回归线-获得y轴上的收盘价

带股票数据的Python线性回归线-获得y轴上的收盘价,python,regression,line,stock,Python,Regression,Line,Stock,我在stackoverflow上使用了前面的一个线程,以达到我发现自己的目的。我想制作一张显示最佳拟合线的股票图表。除了一个问题外,我基本上都能正常工作。y轴显示-0.10到0.25的标准化刻度,而不是股票价格。我希望股票的价格显示在y轴上 #!/usr/bin/env python3 import numpy as np import pandas_datareader.data as web import pandas as pd import datetime import matplo

我在stackoverflow上使用了前面的一个线程,以达到我发现自己的目的。我想制作一张显示最佳拟合线的股票图表。除了一个问题外,我基本上都能正常工作。y轴显示-0.10到0.25的标准化刻度,而不是股票价格。我希望股票的价格显示在y轴上

#!/usr/bin/env python3

import numpy as np
import pandas_datareader.data as web
import pandas as pd
import datetime
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
import statistics as stat

#get adjusted close price of Tencent from yahoo
start = datetime.datetime(2020, 5, 21)
end = datetime.datetime(2021, 5, 21)
tencent = pd.DataFrame()
tencent = web.DataReader('IBM', 'yahoo', start, end)['Adj Close']

nomalized_return=np.log(tencent/tencent.iloc[0])

df = pd.DataFrame(data=nomalized_return)

df = df.resample('D').asfreq()

# Create a 'x' and 'y' column for convenience
df['y'] = df['Adj Close']     # create a new y-col (optional)
df['x'] = np.arange(len(df))  # create x-col of continuous integers


# Drop the rows that contain missing days
df = df.dropna()

X=df['x'].values[:, np.newaxis]
y=df['y'].values[:, np.newaxis]

# Fit linear regression model using scikit-learn
lin_reg = LinearRegression()
lin_reg.fit(X, y)

# Make predictions w.r.t. 'x' and store it in a column called 'y_pred'
df['y_pred'] = lin_reg.predict(df['x'].values[:, np.newaxis])

df['above']= y + np.std(y)
df['below']= y - np.std(y)
# Plot 'y' and 'y_pred' vs 'DateTimeIndex`
df[['y', 'y_pred']].plot()


plt.show()
问题在于这些线路

nomalized_return=np.log(tencent/tencent.iloc[0])

df = pd.DataFrame(data=nomalized_return)
如果我用
df=pd.DataFrame(data=normalized\u return)
替换
df=pd.DataFrame(data=tencent)
,那么它就工作了。我得到了y轴上的价格,但是回归线最终是错误的。 无论如何,下面的图片显示了我从上面的代码中得到了什么,它显示了问题所在


您可以将响应缩回指数并乘以第一个值:

df['y_pred'] = lin_reg.predict(df['x'].values[:, np.newaxis])
df['y_unscaled'] = tencent
df['y_pred_unscaled'] = np.exp(df['y_pred']) * tencent.iloc[0]

df[['y_unscaled', 'y_pred_unscaled']].plot()

从合身的角度发表评论:“最合身”?!我相信你太相信奥卡姆的剃刀了:)