Scikit-Learn构建在NumPy、SciPy和matplotlib之上。它包含了大量现成的机器学习算法。所有算法都有很好的文档记录,易于使用,适合所有经验水平。
Scikit-Learn机器学习库包含了很多强大的算法,每个算法都有自己的对象和一定的参数和方法。
打开命令行并输入
pipinstallscikit-学习
我鼓励所有用户下载Anaconda的Python发行版,它安装了所有的数学和科学库。
前三题(分类、回归、聚类)都是各种算法。虽然最后三个(降维、模型选择和预处理)是修改和分析数据的主题,但当它输入到算法中时会更好地工作。本文主要讨论前三个主题。
监督学习
分类和回归算法都属于机器学习的一部分,叫做& quot监督学习& quot。这意味着这两种类型的算法有一些共同点:算法的数据输入有观察数据和目标(或结果或& quot答案& quot).
一个标准的例子是住房数据及其销售价格。观察数据是每次访问的一个特点。目标是市场上房子的价格。
然后,只要我们有关于它的特征,我们就可以使用监督学习来预测任何房子的价格。
对数据进行分类意味着目标值是离散的(例如,将房子标记为昂贵或便宜)。
回归意味着结果是连续的(房子的实际价格以美元计算,可以是任何正数)。
无监督学习
聚类部分也称为& quot无监督学习& quot。这意味着我们有观测数据,但没有目标。相反,我们希望使用一种算法在观察数据中找到组并创建标签。一个常见的例子是销售或流量数据中的用户细分。
我们将从一个非常简单的例子开始理解这个库:线性回归。
我们将使用Scikit-Learn的内置数据集之一作为练习,使用该模型进行创建、拟合和预测。
注意:这不是对线性回归的深入分析,只是一个简单的例子。
Python代码如下:
fromsklearnimportdatasets
importpandasaspd
fromsk learn . linear _ modelimportLinearRegression
fromsk learn . metrics import mean _ squared _ error,r2_score
#Loadthedata(asNumPyarrays)
观察值,target=datasets . load _ diabetes(return _ X _ y=True)
#初始化算法对象
regression _ model=linear regression()
通常,您将使用所需的参数初始化算法对象。正如我们在这里看到的,许多人都有默认设置。但是,我建议研究每个参数的含义,以确保做出正确的选择。
我们将把数据放入pandasDataFrame中,将数据分成训练集和测试集。Python代码如下:
#MakepandasDataFrames
观测数据=pd。数据框架(数据=观察值)
目标数据=pd。数据帧(数据=目标)
# Separateouttrainingandtestingsetsofdata
测试指数=400
train _ X=observant _ data . iloc[: test _ index]
test _ X=observatory _ data . iloc[test _ index :]
train _ Y=target _ data . iloc[: test _ index]
test _ Y=target _ data . iloc[test _ index :]
现在我们已经准备好去适应这个模型了。
.fit方法
我将使用。拟合方法得到训练数据,并将其放入线性回归算法中。这种方法将计算出最适合数据的基本线性方程。
回归_模型.拟合(训练_X,训练_Y)
.predict方法
为了评估我们的算法仅基于观察数据进行预测的程度,我们使用。预测方法。我们将使用观察数据的测试集来进行预测。
/p>predictions=regression_model.predict(test_X)
然后通过查看R2和MSE指标,了解这些预测与实际目标的对比情况。
print"R2is",r2_score(test_Y,predictions)
>>>R2is0.69857490094
print"MeanSquareErroris",mean_squared_error(test_Y,predictions)
>>>MeanSquareErroris1668.74966759
我们将跳过检查残差图,并查看这些指标。指标告诉我们这个模型没问题。我们能够用我们的模型解释目标中约70%的变化。如果我们在观察数据中使用不同的列组合运行此模型,则均方误差度量将帮助我们比较模型。
你已经看到这个库有算法对象,每个都有一个fit方法。如果您使用的算法是回归或分类算法,它还将具有预测方法。
让我们将我们刚才所做的演练应用到现实生活中的比特币场景中。我们将获得有关比特币的数据,并为比特币价格跌至30天平均水平以下的价格创造了一个信号。
假设我们是一个谨慎的投资者,因此观察30天滚动平均值并不是一个足够好的分析。有没有更好的方法来检查市场行为?
我曾经遇到过一个利用聚类来帮助交易者可视化类似市场行为的金融产品。我认为这很有趣,因为使用监督学习建立准确的模型通常需要数据超出普通人的范围。聚类允许任何人找到他们可用的模式。
那么让我们看看我们是否可以利用Clustering来发现比特币价格的模式。我从Quandl获得一个小比特币数据集(你需要一个帐户)。该数据集包含约3个月的比特币价格。我选择了这个数据集,因为它有市场开盘价和收盘价。
让我们看看市场开盘时是否存在基于比特币价格的市场高点和低点组合。
以下是我们需要的库:
importquandl
importpandasaspd
importmatplotlib.pyplotasplt
fromsklearn.clusterimportDBSCAN
这是我设置数据的Python代码:
#SetuptheQuandlconnection
api_key='GETYOURAPIKEY'
quandl.ApiConfig.api_key=api_key
quandl_code="BCHARTS/BITFLYERUSD"
#Getthebitcoindata
bitcoin_data=quandl.get(quandl_code,returns="numpy",end_date="2018-08-23")
#PutbitcoindataintopandasDataFrame
columns=['Date','Open','High','Low','Close','Volume(BTC)','Volume(Currency)','WeightedPrice']
bitcoin=pd.DataFrame(data=bitcoin_data,columns=columns)
bitcoin=bitcoin.dropna()#dropblanks!
这是一个用于制作检查数据所需的可视化的函数,Python代码如下:
defmake_jpg(color,filename,y_column_name):
#makefigure
fig=plt.figure(figsize=(8,5),dpi=100)
#addaxesatspecificposition
position=[0.1,0.1,0.8,0.8]
axes=fig.add_axes(position)
#scatterplot
x_column_name="Open"
X=bitcoin[x_column_name]
Y=bitcoin[y_column_name]
axes.scatter(X,Y,color=color)
axes.set_xlabel(x_column_name)
axes.set_ylabel(y_column_name)
axes.set_title("{0}vs{1}".format(x_column_name,y_column_name))
axes.grid(b=True)
fig.savefig(filename)
以下是我们的数据:
现在这是一个线性关系,使用这些数据构建超精确回归模型需要相当多的其他数据点,所以让我们坚持使用聚类算法告诉我们的内容。
Scikit-Learn有许多可用的聚类算法。我们将使用DBSCAN,因为我们不知道应该有多少clusters,我们希望关注具有数据点集中的区域。您可以根据您希望如何构建策略来使用其他聚类算法。
这是为Open和High以及OpenvsLow数据构建聚类算法的Python代码:
deflearn(y_column_name):
#makevisualizationbeforelearningprocess
filename1="BitcoinOpenv{0}.jpg".format(y_column_name)
make_jpg("blue",filename1,y_column_name)
#MLalgorithm
dbscan=DBSCAN(eps=150)
dbscan.fit(bitcoin.loc[:,["Open",y_column_name]])
#takeoutthelables
labels=dbscan.labels_
#makevisualizations
ify_column_name=='High':
color_map={-1:"k",0:"r",1:"orange",2:"y"}
else:
color_map={-1:"k",0:"g",1:"b",2:"purple",3:"cyan"}
colors=[color_map[l]forlinlabels]
#storethelabelscolors
bitcoin['vs{0}Labels'.format(y_column_name)]=colors
filename2="BitcoinOpenv{0}Learn.jpg".format(y_column_name)
make_jpg(colors,filename2,y_column_name)
returndbscan
high_dbscan=learn("High")
low_dbscan=learn("Low")
Epsilon:两个数据点之间的最大距离是多少,以便它们仍然在同一个聚类中。我为这个价值选了150美元。
那我们发现了什么?
我们的clusters是具有类似的市场行为。黑点是不属于cluster的异常值。
让我们看看每个cluster,找出High/Lowprice和Openprice之间的平均偏差。
bitcoin["OpenvsHighDiff"]=bitcoin['High']-bitcoin['Open']
printbitcoin.groupby('vsHighLabels')["OpenvsHighDiff"].mean()
>>>vsHighLabels
black312.500000
orange139.954200
red82.933571
yellow48.316000
bitcoin["OpenvsLowDiff"]=bitcoin['Open']-bitcoin['Low']
printbitcoin.groupby('vsLowLabels')["OpenvsLowDiff"].mean()
>>>vsLowLabels
black359.137222
blue104.825000
cyan107.212857
green124.174286
purple113.181282
上面的结果告诉我们,如果有一天市场开盘的比特币价格在6,500美元左右,类似的数据点看到平均高价+139美元和低价-当天开盘价113美元。
那么现在怎么办?下一步是可以将我们学到的东西放入一个自动测试和执行交易策略的系统中。
上一篇:U盘系统修复
下一篇:王者荣耀装备天穹怎么购买