本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

初学者入门:如何用Python和SciKit Learn 0.18实现神

时间:2017-06-03 23:29来源:118论坛 作者:j2开奖直播 点击:
参与:Jane W、吴攀 本教程的代码和数据来自于 Springboard 的博客教程。本文的作者为 Jose Portilla,他是网络教育平台 Udemy 一门数据科学类课程的讲师。 GitHub 链接:https://github.com/Roger

参与:Jane W、吴攀

本教程的代和数据来自于 Springboard 的博客教程。本文的作者为 Jose Portilla,他是网络教育平台 Udemy 一门数据科学类课程的讲师。

GitHub 链接:https://github.com/Rogerh91/Springboard-Blog-Tutorials/blob/master/Neural%20Networks%20/JMPortilla_SpringBoard_Blog_Neural_Network.ipynb

最受欢迎的 Python 机器学习库是 SciKit Learn。最新版本(0.18)支持神经网络模型。在本文中,我们将了解神经网络的工作方式以及如何使用 Python 编程语言和最新版本的 SciKit-Learn 来实现它们。了解这篇文章需要 Python 基础知识,而且它也有助于积累 SciKit Learn 的经验。

本文的代及结果用 Jupyter Notebook 编写,In [*]: 代表输入的代码,Out[*]: 代表程序输出的结果。

神经网络

人工神经网络是一种模仿生物神经网络学习模式的机器学习框架:可以将它们粗略地近似为人类在学习中的思维活动。生物神经网络具有相互连接的神经元,神经元的树突结构接收输入,并基于这些输入产生输出信号,通过轴突传输到另一个神经元。我们将尝试通过人工神经网络(ANN,简称神经网络)来模拟这个过程。神经网络是深度学习的基础,它属于机器学习范畴,是当今最令人兴奋的技术进步之一。在利用 Python 创建神经网络之前,j2直播,让我们先从最基本形式——单个感知器(perceptron)开始。下面是感知器的介绍。

感知器

一个感知器完整的结构包括一个或多个输入、偏置、激活函数和一个输出。感知器接收输入,并将它们与权重相乘,然后传递到激活函数以产生输出。有许多可能的激活函数可供选择,如 logistic 函数、三角函数、阶跃函数(step function)等。我们需要确保向感知器模型添加偏置(用来调整激活函数的位置),它是不受输入影响的常数型权重,能使预测模型的拟合效果达到最佳。下面的图表展示了感知器的结构:

初学者入门:如何用Python和SciKit Learn 0.18实现神

一旦得到输出,我们可以将其与一个已知的标签进行比较,并相应地调整权重(开始时通常用随机数初始化权重值)。重复此过程,直到达到允许的最大迭代次数或可接受的错误率。

为了创建一个神经网络,我们可以从叠加多层感知器开始,创建一个神经网络的多层感知器模型。它包含了传入数据的输入层和产生结果的输出层。输入层和输出层之间的任何层都被称为隐藏层,因为它们不能直接「看到」数据的特征输入或输出。下图直观地反映了输入层、隐藏层和输出层的关系(来源:维基百科)。

初学者入门:如何用Python和SciKit Learn 0.18实现神

由于神经网络的特点,神经网络在 GPU 上的表现往往比 CPU 好。可惜的是,SciKit-learn 框架不支持 GPU 加速优化。如果你想使用 GPU 和分布式模型,请参考其它框架,例如谷歌的开源框架 TensorFlow。

让我们继续用 Python 和 SciKit-learn 创建神经网络。

SciKit-Learn

本教程使用了最新版本的 SciKit-Learn(> 0.18),它可以通过 pip 或 conda 来轻松安装,也可以参考官方安装文档()获取完整的详细信息。

Anaconda 和 iPython Notebook

Anaconda 的 iPython Notebook(Jupyter Notebook)软件可以轻松地帮助你安装 SciKit-Learn 以及所需的所有工具。下面的链接中有如何安装这些软件的教程(https://www.safaribooksonline.com/blog/2013/12/12/start-ipython-notebook/),以便你快速在 Python 中构建神经网络。

数据

本文的分析主题为葡萄酒。葡萄酒伪劣品是一件非常现实的事情,让我们来看看 Python 的神经网络是否可以帮助解决这个问题。我们将使用 UCI 机器学习库中的葡萄酒数据集。它具有不同葡萄酒的各种化学特征,均在意大利同一地区生长,但数据标签分类为三种不同的品种。我们将尝试建立一个可以根据其化学特征对葡萄酒品种进行分类的神经网络模型。

数据集链接:https://archive.ics.uci.edu/ml/datasets/Wine

第一步,先导入数据

importpandasaspd

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"])

查看数据结构:

In [9]:

wine.head()

Out[9] 为了符合本文的格式,我们截取了部分列(实际数据有更多列):

初学者入门:如何用Python和SciKit Learn 0.18实现神

In [12]:

wine.describe().transpose()

Out[12]为了符合本文的格式,从输出中去掉了标准偏差(std)和计数列:

初学者入门:如何用Python和SciKit Learn 0.18实现神

In [13]:

# 178 data points with 13 features and 1 label columnwine.shape

Out[13]:

(178, 14)

将数据的标签设置为 y:

In [14]:

X=wine.drop('Cultivator',axis=1)

y=wine['Cultivator']

准备训练集和测试集

下面将数据分成训练集和测试集,这可以通过使用 SciKit-Learn 的 model_selection 中的 train_test_split 函数轻松完成:

In [15]:

fromsklearn.model_selectionimporttrain_test_split

In [16]:

X_train,X_test,y_train,y_test=train_test_split(X,y)

数据预处理

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容