Scikit Learn 股票投资:p13

前言

到此为止我们已经完成了对数据的清洗和整理,本视频将会利用整理后的数据结合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'和转换为01, 因为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只是作为一名搬运工,连码农都称不上。 但制作代码中的注释、翻译和搬运都花了很多时间,请各位大侠高抬贵手,在转载时请注明出处。

阅读量: | 柯西君_BingWong | 2017-09-01