相関分析から、米国株式データの前の記事では、我々は将来的には米国株式の履歴価格データと予測を行います、コードのプレゼンテーションとデモンストレーションを行いました。
株価の期待
株価の期待
プロジェクトの特徴
株価を予測するために、これらの3つの機械学習モデルの使用:
単純な線形解析、
二次判別分析(QDA)
K最近傍(KNN)。
レベルのパーセンテージおよびパーセントの変化:まずは、いくつかの関数を書いてみましょう。
dfreg = df.loc [:、[ '調整]閉じる'、 'ボリューム']]
dfreg [ 'HL_PCT'] =([ 'ハイ'] DF - [ '低'] DF)/ DF [ '閉じる'] * 100.0
dfreg [ 'PCT_change'] =(DF [ '閉じる'] - [ '開く'] DF)/ DF [ '開く'] * 100.0
生成された最終データブロック
前処理とクロスバリデーション
クロスバリデーション
予測モデルへのデータの前に、次の手順では、きれいにし、データを処理するために使用されます。
1.取り扱い欠損値の損失
ラベルデータセグメント2.、ターゲット列が予測AdjClose
3.スケールX、各データは、線形回帰分布を満たすように
4.最後に、モデル生成と評価のためのトレーニングセットXとXを決定します
5.結果を予測するように設定され、タグをyとして識別されます
交差検定試験及び試験モデル列車分離により単離し6トレーニング
さて、ステップが終了しました。コードは以下の通りであります:
欠損値をドロップ
dfreg.fillna(値= -99999、インプレース=真)
我々は予測するデータの1パーセントを分離したいです
forecast_out = INT(math.ceil(0.01 * LEN(dfreg)))
ここにラベルを分離し、我々はAdjCloseを予測したいです
forecast_col =「調整]を閉じます」
dfreg['label'] = dfreg[forecast_col].shift(-forecast_out)
X = np.array(dfreg.drop(['label'], 1))
Scale the X so that everyone can have the same distribution for linear regression
X = preprocessing.scale(X)
Finally We want to find Data Series of late X and early X (train) for model generation and evaluation
X_lately = X[-forecast_out:]
X = X[:-forecast_out]
Separate label and identify it as y
y = np.array(dfreg['label'])
y = y[:-forecast_out]
模型生成 - 愉快的预测开始了
首先,导入Scikit-Learn:
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import Ridge
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
简单线性分析和二次判别分析
简单线性分析显示两个或多个变量之间的线性关系。当我们在两个变量中绘制这种关系时,我们得到一条直线。二次判别分析与简单线性分析类似,只是模型允许多项式(例如:x平方)并产生曲线。
线性回归预测因变量(y)作为输出给出独立变量(x)作为输入。在绘图期间,这将给我们一条直线,如下所示:
简单线性回归
下面通过使用Scikit-Learn库来训练模型。代码如下。
Linear regression
clfreg = LinearRegression(n_jobs=-1)
clfreg.fit(X_train, y_train)
Quadratic Regression 2
clfpoly2 = make_pipeline(PolynomialFeatures(2), Ridge())
clfpoly2.fit(X_train, y_train)
Quadratic Regression 3
clfpoly3 = make_pipeline(PolynomialFeatures(3), Ridge())
clfpoly3.fit(X_train, y_train)
K近邻(KNN)
该KNN使用特征相似性来预测数据点的值。这可确保分配的新点与数据集中的点类似。为了找出相似性,将选取点以得到最小距离(例如:欧几里德距离)。
KNN模型可视化,您可以将被质疑的元素分组为k个元素
KNN Regression
clfknn = KNeighborsRegressor(n_neighbors=2)
clfknn.fit(X_train, y_train)
评估
简单快速而有效的评估方法
一种简单快速而有效的评估方法是在每个训练模型中使用得分方法。得分方法使用测试数据集的y找到self.predict(X)的平均准确度。
confidencereg = clfreg.score(X_test, y_test)
confidencepoly2 = clfpoly2.score(X_test,y_test)
confidencepoly3 = clfpoly3.score(X_test,y_test)
confidenceknn = clfknn.score(X_test, y_test)
results
('The linear regression confidence is ', 0.96399641826551985)
('The quadratic regression 2 confidence is ', 0.96492624557970319)
('The quadratic regression 3 confidence is ', 0.9652082834532858)
('The knn regression confidence is ', 0.92844658034790639)
这显示了这些模型的大多数有着极高准确度分数(> 0.95)。然而,这并不意味着我们可以盲目套用,并交易股票。仍有许多问题需要注意,特别是对于不同价格轨迹不同的公司。
为了直观感觉,打印一些预测的股票预测结果。
forecast_set = clf.predict(X_lately)
dfreg['Forecast'] = np.nan
result
(array([ 115.44941187, 115.20206522, 116.78688393, 116.70244946,
116.58503739, 115.98769407, 116.54315699, 117.40012338,
117.21473053, 116.57244657, 116.048717 , 116.26444966,
115.78374093, 116.50647805, 117.92064806, 118.75581186,
118.82688731, 119.51873699]), 0.96234891774075604, 18)
预测可视化
使用现有的历史数据来预测未来的价格。这将有助于我们理解并掌握,可视化模型如何预测未来的股票定价。
LAST_DATE = dfreg.iloc [-1] .nameの
last_unix = LAST_DATE
next_unix = last_unix + datetime.timedelta(日= 1)
私forecast_set中のため:
NEXT_DATE = next_unix
next_unix + = datetime.timedelta(日= 1)
dfreg.loc [NEXT_DATE] = [_範囲のためnp.nan(LEN(dfreg.columns)-1)] + [I]
dfreg [ '調整]閉じる']。テール(500).PLOT()
dfreg [ '予測']。テール(500).PLOT()
plt.legend(LOC = 4)
plt.xlabel( '日付')
plt.ylabel( '価格')
plt.show()
在庫予測の可視化
あなたは青が回帰に基づいて株価を示して見ることができます。予想将来価格は、その後、あまり長引く不況も回復します。したがって、あなたは、景気回復時の低迷時に株式を売買することができます。
ます。https://www.jianshu.com/p/0fd209702365で再現