数学盲摆弄神经网络

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/

这篇文章的主要内容翻译如下:

  • 要处理的实际问题:假酒识别。
  • 有关酒的数据,表示酒的各种化学特征。这些酒产自意大利的同一地区,并分成3种类型,作为数据标签。我们要用神经网络打造一模型,根据它的化学特征把酒分类。
  • 数据下载在此:https://archive.ics.uci.edu/ml/datasets/Wine
  • 学习 scikit-learn 编程,最好的 IDE 是 IPython/Jupyter Notebook
  • 首先导入下载的数据。
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)

  • 数据的预处理
    用内建的数据规整器 StandardScaler 对数据进行规范化处理,这是必须的操作。
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)

  • 训练模型
    SciKit-Learn 使用估计器(estimator),以极其简便的方式对模型进行训练。
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、我的几点看法

  • MLP 算法属于有监督学习,它用的数据有“标签”(目标)。
  • MLP 算法使用的是反向传播的方式。
    反向传播,是指 MLP 可以根据输出结果调整模型系数的值。
  • MLP 算法,运算的结果和目的,是得到训练后的模型系数。
  • 训练后的模型,可以保存在硬盘上,以备后用:
>>> from sklearn.externals import joblib
>>> joblib.dump(mlp, 'filename.pkl') 
### 以后,可以装入模型使用:
>>>
>>> mlp = joblib.load('filename.pkl') 


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值