赞
踩
深度学习是机器学习领域中一个新的研究方向,它被引入机器学习使其更接近于人工智能。
人工智能是一个最宽泛的概念,是一个研究领域,同时也是一个实现目标,而机器学习则是实现这一目标的一类方法。深度学习只是机器学习这一类方法中的一种。
早期的浅层结构(如支持向量机、逻辑回归等)在涉及到一些复杂的问题,如语音、图像、视觉等问题时,会造成维度灾难。
以深度学习为基础的人工智能技术,在升级改造众多的传统行业领域,存在极其广阔的应用场景。
深度学习改变了很多领域算法的实现模式。
深度学习还推动人工智能进入了工业大生产阶段,算法的通用性促使标准化、自动化和模块化的框架产生。
除了应用广泛的特点外,深度学习还推动人工智能进入了工业大生产阶段,算法的通用性促使标准化、自动化和模块化的框架产生。 在深度学习出现之前,不同流派的机器学习算法理论和实现有所不同,这就导致每个算法均要独立实现,如随机森林和支撑向量机(SVM)。但在深度学习框架下,不同模型的算法结构具有较大的通用性,如常用于计算机视觉的卷积神经网络模型(CNN)和常用于自然语言处理的长期短期记忆模型(LSTM),都可以分为组网模块、梯度下降的优化模块和预测模块等。 这就使得抽象出统一的框架成为了可能,就能大大降低编写建模代码的成本。因此,一些相对通用的模块,如网络基础算子的实现、各种优化算法等都可以由框架实现。建模者只需要关注数据处理,配置组网的方式,并能够用少量代码串起训练和预测的流程即可。
在深度学习框架出现之前,机器学习工程师处于“手工作坊”生产的时代。为了完成建模,工程师需要储备大量的数学知识,并为特征工程工作积累大量行业知识。每个模型是极其个性化的,建模者如同手工业者一样,将自己的积累形成模型的“个性化签名”。而今,“深度学习工程师”进入了工业化大生产时代,只要掌握深度学习必要但少量的理论知识,掌握Python编程,即可在深度学习框架上实现非常有效的模型,甚至与该领域最领先的模型不相上下。建模领域的技术壁垒面临着颠覆,这同时也是新入行者的机遇。
神经网络能够反映人类大脑的行为,允许计算机程序识别模式,以及解决人工智能、机器学习和深度学习领域的常见问题。
在生物神经网络中,每个神经元与其他神经元通过突触进行连接。
神经元之间的信息传递,属于化学物质的传递。
M-P神经元模型实际上是对单个神经元的一种建模。
以经典乳腺癌为例
In [18]
- #导入需要的包
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- import sklearn.datasets
- from sklearn.metrics import accuracy_score #以准确率为评价指标
- from sklearn.model_selection import train_test_split #用来分割数据集
- #导入数据集
- from sklearn.datasets import load_breast_cancer
- #分离特征和标签
- # 1表示良性,0表示恶性
- breast_cancer = sklearn.datasets.load_breast_cancer()
- data = pd.DataFrame(breast_cancer.data,columns=breast_cancer.feature_names)
- data['class'] = breast_cancer.target
- data['class'].value_counts()
- X = data.drop('class',axis=1)
- y = data['class']
- #数据集划分
- #划分数据集和测试集,测试集的大小为总体数据的15%。设置stratify=y
- #按照数据集中y的比例分配给train和test,使得train和test中各类别数据的比例与原数据集的比例一致。通常在数据集的分类分布不平衡的情况下会用到stratify。
- X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.15, stratify=y, random_state=0)
- #M—P神经元模型仅能把0或1作为输入,所以我们要把数据进行处理,划分为0和1两类。
- X_binarise_train =X_train.apply(pd.cut, bins=2, labels=[1,0])
- X_binarise_test = X_test.apply(pd.cut, bins=2, labels=[1,0])
- #获取value,用数组进行计算
- X_binarise_train = X_binarise_train.values
- X_binarise_test = X_binarise_test.values
- #构建M-P神经元类
- class MPNeuron:
- def __init__(self):
- self.b = None
-
- def model(self,x):
- return (sum(x) >= self.b)
-
- def predict(self,X):
- y = []
- for x in X:
- y.append(self.model(x))
- return np.array(y)
-
- def fit(self,X,y):
- accuracy = {}
- for b in range(X.shape[1] + 1):
- self.b = b
- y_pred = self.predict(X)
- accuracy[b] = accuracy_score(y_pred,y)
-
- best_b = max(accuracy, key = accuracy.get)
- self.b = best_b
- #打印最佳b值和最高准确率
- print('best_b:', best_b)
- print('best_accuracy:', accuracy[best_b])
-
- #用M-P神经元训练,机器学习叫作fit,深度学习叫作train
- mp_neuron = MPNeuron()
- mp_neuron.fit(X_binarise_train,y_train)
- #打印accuracy_score
- w = mp_neuron.predict(X_binarise_test)
- accuracy_score(w,y_test)
阶跃函数 — 可以将神经元输入值与阈值的差值映射为输出值1或0.若差值大于等于零则输出1,对应兴奋;若差值小于零则输出0,对应抑制。
S型函数(sigmoid函数)— 无论输入值的范围有多大,这个函数都可以将输出挤压在范围(0,1)之内。
阶跃函数
In [2]
- import numpy as np
- import matplotlib.pyplot as plt
- def step_function(x):
- return np.where(x >= 0, 1, 0) # 如果输入值大于等于0,则输出1,否则输出0
- x = np.linspace(-2, 2, 1000) # 创建一个从-2到2的等差数列,包含1000个元素
- y = step_function(x)
- plt.figure(figsize=(8, 6)) # 创建一个8x6大小的新图形
- plt.plot(x, y)
- plt.title('Step Function')
- plt.xlabel('x')
- plt.ylabel('y')
- plt.grid(True) # 添加网格线
- plt.axis('on') #显示坐标轴
- plt.show()
<Figure size 800x600 with 1 Axes>
S型函数
In [16]
- # 导入numpy库,用于进行数学计算
- import numpy as np
- # 导入matplotlib库,用于绘制图形
- import matplotlib.pyplot as plt
- # 定义sigmoid函数,接受一个参数x
- def sigmoid(x):
- # 返回1 / (1 + np.exp(-x))的结果,np.exp(-x)计算e的-x次方
- return 1 / (1 + np.exp(-x))
- # 使用numpy的linspace函数在-10和10之间创建一个等间距的点集,结果存储在x中
- x = np.linspace(-10, 10, 1000)
- # 计算每个点的sigmoid值并存储在y中
- y = sigmoid(x)
- # 使用matplotlib的plot函数将这个函数绘制出来
- plt.plot(x, y)
- # 设置图形的标题为"Sigmoid Function"
- plt.title("Sigmoid Function")
- # 设置x轴的标签为"x"
- plt.xlabel("x")
- # 设置y轴的标签为"y"
- plt.ylabel("y")
- # 添加网格线
- plt.grid(True)
- # 显示图像
- plt.show()
<Figure size 640x480 with 1 Axes>
感知机是一种判别模型,其目标是求得一个能够将数据集中的正实例点和负实例点完全分开的分离超平面。
基本结构 — 由两层神经元构成的网络结构。
上面所讲到的M-P神经元模型其实就是对单个神经元的一种建模,需要注意的一点是,M-P模型的权重和阈值都是人为给定的,所以对这一类模型不存在“学习”的说法。其实,这也是M-P模型与单层感知机最大的区别,感知机中引入了学习的概念,权重和阈值是通过学习得来的。
单层感知机模型是由美国科学家Frank Rosenblatt(罗森布拉特)在1957年提出的,它的基本结构如图所示,简单来说,感知机(Perceptron)就是一个由两层神经元构成的网络结构:输入层接收外界的输入信号,通过激活函数(阈值)变换,把信号传送至输出层,因此它也被称为“阈值逻辑单元”;输出层(也被称为是感知机的功能层)就是M-P神经元。
输出的数学表达式如图所示。可以看到,大于阈值的时候输出为1,小于等于阈值的时候输出为0。
通过区分香蕉和西瓜的经典案例来看看感知机是如何工作的。
这样一来,可以很容易根据感知机输出 数学表达式,如下式所示,对西瓜和香蕉做出鉴定: 西瓜:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。