1、 scikit-learn 是机器学习最佳入门工具
想着用神经网络之类的办法,分析股票数据,增收减亏,降低交易风险。
恰逢人工智能火热,跟着卷入了机器学习的潮涌。
看过一些高论,说是要学机器学习,必须先学好高等数学:微积分、线性代数、数理统计和概率论等。
没有受过这些数学的课堂教育,只有从网上找到一堆相关的电子书籍,试着自学。
在走马观花、囫囵吞枣、时断时续地自学之后,终于对些许基本概念一知半解、似懂非懂。
其间,同时学了 numpy、pandas、pyplotlib、scikit-learn 等,懂了一些基本东西。
真正感觉有些开窍,是学习 scikit-learn 的结果。
scikit-learn 的电子书很少见,我只读过一本,版本陈旧,草草翻了翻。
最好的资料在这里 http://scikit-learn.org/stable/documentation.html
认真读下 Quick Start、Tutorials、User Guide,就能明白机器学习是怎么回事,和 scikit-learn 的用法套路。
中文版的在这里 http://sklearn.apachecn.org/ 但翻译的内容不够全面完整。
2、 scikit-learn 避开了数学障碍
对于某工具的用户来说,需要的是会用工具,而非工具的工作原理。
比如,用计算器算加减乘除,无需知道它的软硬件如何工作。
我摆弄机器学习,只是想用它辅助处理炒股的实际问题,不想知道算法的数学原理。
scikit-learn 的文档,不要求用户有数学背景。
scikit-learn 使用时,无需数学公式、方程的参与。
通常,解决机器学习问题的最困难的部分可能是找到恰当的的评估器(estimator)。
不同的评估器适合不同类型的数据和不同的问题。
应该把精力放在如何选择使用 scikit-learn 的工具上,不必关心那些数学原理。
3、 scikit-learn 神经网络的简单用法
scikit-learn 的工具功能强大而用法简单。Jose Portilla先生给出了一个好例子:
https://www.springboard.com/blog/beginners-guide-neural-network-in-python-scikit-learn-0-18/
这篇文章的主要内容翻译如下:
import pandas as pd
wine = pd.read_csv('wine_data.csv', names = ["Cultivator", "Alchol",
"Malic_Acid", "Ash", "Alcalinity_of_Ash",
"Magnesium", "Total_phenols", "Falvanoids",
"Nonflavanoid_phenols", "Proanthocyanins",
"Color_intensity", "Hue", "OD280", "Proline"])
X = wine.drop('Cultivator',axis=1)
y = wine['Cultivator']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# 只拟合训练用数据
scaler.fit(X_train)
StandardScaler(copy=True, with_mean=True, with_std=True)
# 对训练用和测试用数据进行规范化转换:
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(hidden_layer_sizes=(13,13,13),max_iter=500)
mlp.fit(X_train,y_train)
predictions = mlp.predict(X_test)
接着,对模型的性能表现给出评价:
from sklearn.metrics import classification_report,confusion_matrix
print(confusion_matrix(y_test,predictions))
print(classification_report(y_test,predictions))
从上述评价可以看出,本模型的性能表现相当不错。
但是,也应看到 MLP 多层感知器模型有着难以解释自身行为的缺点:模型的权重和偏置值的变化与模型性能之间的关系,很难解释清楚。
如果需要取出训练好的 MLP 模型的权重和偏置,直接读出属性 mlp.coefs_ 和 mlp.intercepts_ 即可。
4、我的几点看法
>>> from sklearn.externals import joblib
>>> joblib.dump(mlp, 'filename.pkl')
### 以后,可以装入模型使用:
>>>
>>> mlp = joblib.load('filename.pkl')