Pandas 的 DataFrame 可以轻易转换为 NumPy 数组,所以事情就是这样的。
目前为止我们的代码:
import quandl, math
import numpy as np
import pandas as pd
from sklearn import preprocessing, cross_validation, svm
from sklearn.linear_model import LinearRegression
df = quandl.get("WIKI/GOOGL")
print(df.head())
#print(df.tail())
df = df[['Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close', 'Adj. Volume']]
df['HL_PCT'] = (df['Adj. High'] - df['Adj. Low']) / df['Adj. Close'] * 100.0
df['PCT_change'] = (df['Adj. Close'] - df['Adj. Open']) / df['Adj. Open'] * 100.0
df = df[['Adj. Close', 'HL_PCT', 'PCT_change', 'Adj. Volume']]
print(df.head())
forecast_col = 'Adj. Close'
df.fillna(value=-99999, inplace=True)
forecast_out = int(math.ceil(0.01 * len(df)))
df['label'] = df[forecast_col].shift(-forecast_out)
我们之后要丢弃所有仍旧是 NaN 的信息。
df.dropna(inplace=True)
对于机器学习来说,通常要定义X
(大写)作为特征,和y
(小写)作为对于特征的标签。这样,我们可以定义我们的特征和标签,像这样:
X = np.array(df.drop(['label'], 1))
y = np.array(df['label'])
上面,我们所做的就是定义X
(特征),是我们整个的 DataFrame,除了label
列,并转换为 NumPy 数组。我们使用drop
方法,可以用于 DataFrame,它返回一个新的 DataFrame。下面,我们定义我们的y
变量,它是我们的标签,仅仅是 DataFrame 的标签列,并转换为 NumPy 数组。
现在我们就能告一段落,转向训练和测试了,但是我们打算做一些预处理。通常,你希望你的特征在 -1 到 1 的范围内。这可能不起作用,但是通常会加速处理过程,并有助于准确性。因为大家都使用这个范围,它包含在了 Sklearn 的preprocessing
模块中。为了使用它,你需要对你的X
变量调用preprocessing.scale
。
X = preprocessing.scale(X)
下面,创建标签y
:
y = np.array(df['label'])
现在就是训练和测试的时候了。方式就是选取 75% 的数据用于训练机器学习分类器。之后选取剩下的 25% 的数据用于测试分类器。由于这是你的样例数据,你应该拥有特征和一直标签。因此,如果你测试后 25% 的数据,你就会得到一种准确度和可靠性,叫做置信度。有许多方式可以实现它,但是,最好的方式可能就是使用内建的cross_validation
,因为它也会为你打乱数据。代码是这样:
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2)
这里的返回值是特征的训练集、测试集、标签的训练集和测试集。现在,我们已经定义好了分类器。Sklearn 提供了许多通用的分类器,有一些可以用于回归。我们会在这个例子中展示一些,但是现在,让我们使用svm
包中的支持向量回归。
clf = svm.SVR()
我们这里仅仅使用默认选项来使事情简单,但是你可以在sklearn.svm.SVR
的文档中了解更多。
一旦你定义了分类器,你就可以训练它了。在 Sklearn 中,使用fit
来训练。
clf.fit(X_train, y_train)
这里,我们拟合了我们的训练特征和训练标签。
我们的分类器现在训练完毕。这非常简单,现在我们可以测试了。
confidence = clf.score(X_test, y_test)
加载测试,之后:
print(confidence)
# 0.960075071072
所以这里,我们可以看到准确率几乎是 96%。没有什么可说的,让我们尝试另一个分类器,这一次使用LinearRegression
:
clf = LinearRegression()
# 0.963311624499
网友评论