▌前言
到此为止我们已经完成了对数据的清洗和整理,本视频将会利用整理后的数据结合p11介绍的线性模型实现Machine Learning(机器学习)
。
▌视频
▌视频出处
视频系列:Scikit-learn Machine Learning with Python and SKlearn
本视频出处:Scikit Learn Machine Learning for investing Tutorial with Python p. 13
哔哩哔哩:Scikit Learn Machine Learning for investing Tutorial with Python p. 13
▌内容
首先定义一个function def Build_Data_Set
来读取数据, 需要训练(fit)的数据为DE Ratio、Trailing P/E
:
def Build_Data_Set(features = ["DE Ratio","Trailing P/E"]):
#读取key_stats.csv
data_df = pd.DataFrame.from_csv("key_stats.csv")
#将features转换为np.array
X = np.array(data_df[features].values)
#将'outperform和outperform'和转换为0 和 1, 因为machine learning只会区分数字
y = (data_df['Status']
.replace('underperform', 0)
.replace('outperform',1)
.values)
return X, y
然后定义一个function Analysis
, 用作训练数据,建立线性回归模型:
def Analysis():
X, y = Build_Data_Set()
#设为linear回归模型
clf = svm.SVC(kernel = 'linear', C=1.0)
#训练我们的模型
clf.fit(X,y)
#下面的代码都是用于画图,可以忽略
w = clf.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(min(X[:,0]), max(X[:,0]))
yy = a * xx - clf.intercept_[0] /w[1]
h0 = plt.plot(xx,yy,'k-', label ='non weighted')
plt.scatter(X[:,0], X[:,1], c=y)
plt.ylabel('Trailing P/E')
plt.xlabel('DE Ratio')
plt.legend()
plt.show()
Analysis()
不知道大家有没有留意到Analysis()
中的plt.scatter
部分,作者使用了X[:,0], X[:,1]
。 其主要的目的是分别读取X中的DE Ratio和Trailing P/E
:
#下面这个例子很好说明代码如何运作:
x = [[1,3],
[1,5],
[1,7]]
x[:,0] 意思是获取每组数的第一位,x[:,0] ->1,1,1
x[:,1] 意思是获取每组数的第二位,x[:,1] ->3,5,7
▌输出结果
上图为输出结果,不同颜色代表优于大盘或者劣于大盘的股票。 不过上面的例子只是简单地利用了DE Ratio和Trailing P/E
两个features,其机器学习的意义暂时不大。
▌源代码
import numpy as np
from sklearn import svm
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
def Build_Data_Set(features = ["DE Ratio","Trailing P/E"]):
#读取key_stats.csv
data_df = pd.DataFrame.from_csv("key_stats.csv")
#将features转换为np.array
X = np.array(data_df[features].values)
#将'outperform和outperform'和转换为0 和 1, 因为machine learning只会区分数字
y = (data_df['Status']
.replace('underperform', 0)
.replace('outperform',1)
.values)
return X, y
def Analysis():
X, y = Build_Data_Set()
#设为linear回归模型
clf = svm.SVC(kernel = 'linear', C=1.0)
#训练我们的模型
clf.fit(X,y)
#下面的代码都是用于画图,可以忽略
w = clf.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(min(X[:,0]), max(X[:,0]))
yy = a * xx - clf.intercept_[0] /w[1]
h0 = plt.plot(xx,yy,'k-', label ='non weighted')
plt.scatter(X[:,0], X[:,1], c=y)
plt.ylabel('Trailing P/E')
plt.xlabel('DE Ratio')
plt.legend()
plt.show()
Analysis()
▌最后
虽然分c君_BingWong
只是作为一名搬运工,连码农都称不上。 但制作代码中的注释、翻译和搬运都花了很多时间,请各位大侠高抬贵手,在转载时请注明出处。