如何做婚恋网站,湛江的网站建设公司,仪征做网站,下载flash网站motivation
如果逻辑回归的特征有很多#xff0c;会造出现一些列问题#xff0c;比如#xff1a; 线性假设的限制#xff1a; 逻辑回归是基于线性假设的分类模型#xff0c;即认为特征与输出之间的关系是线性的。如果特征非常多或者特征与输出之间的关系是非线性的#…motivation
如果逻辑回归的特征有很多会造出现一些列问题比如 线性假设的限制 逻辑回归是基于线性假设的分类模型即认为特征与输出之间的关系是线性的。如果特征非常多或者特征与输出之间的关系是非线性的逻辑回归可能无法很好地进行分类。 特征间相关性 如果特征之间高度相关逻辑回归可能会受到多重共线性的影响导致参数估计不稳定或难以解释。 非线性决策边界的需求 在复杂的分类问题中数据可能需要非线性的决策边界来更好地进行分类。
相比之下神经网络有一系列的优势 非线性关系建模 神经网络能够学习复杂的非线性关系因此在特征与输出之间存在非线性关系或需要复杂的决策边界时神经网络通常能提供更好的性能。 自动特征学习 神经网络能够通过隐藏层自动学习特征的高级表示无需手动进行特征工程这对于大量特征的问题尤为有利。 适应性强 神经网络通常对数据中的噪声和复杂性具有一定的鲁棒性能够更好地泛化到新的数据集。
简单人工神经网络
那么简单介绍一下神将网络 上面是一个简单人工神经网络x1--x3是输入的特征每个特征都会乘上相应的参数最后得到一个值。(这样看起来和线性回归差不多)
复杂神经网络(旧版本)
接下来介绍一个稍微复杂一点的
首先定义一些术语
第i层第j个神经元的激活项从j层到j1层的权重矩阵注意行从1开始列从0开始激活项由一个神经元接受并输出的值 注意 其中g是激活函数。
这里可能不容易理解
其实是一个矩阵 上图其实还有一个隐藏的没有画出。就像第一个图一样这个是用来调节参数的。
在上图中表示第二层的第i个神经元接受第一层的第j个特征值形成的参数(权重)。权重乘上相应的数值得到的值(这个神经元接受前面的所有的神经元传递给他的值的和)(如上是由前面x0,x1,x2,x3传递给第二层第一个神经元得到,再通过激活函数g映射得到数值。)
得到结论
一个神经网络的第j层有个单元第(j1)层有个单元那么从j到(j1)层的权重矩阵属于。即形状为。
复杂神经网络(新版本)
我们再来看一下另一种解释(其实本质差不多只不过最新的术语有些改变)
第i层输入出向量这个神经元的权重 这里面x就是一个特征向量矩阵叫做0层(layer0),与上面一个版本有所不同上面一个版本吧输入的x叫做layer1。这里面我们把每一个圆形叫做一个“神经元”每个神经元都有两个参数分别是向量和参数b。这个向量的维度与其前一层神经元的个数有关如果前一层神经元有n个那么这个向量就是n维因为这样才可以出现下面图展示的 这里可以简化为 注意:每一层的g函数是一样的不同层的g函数可以不一样。为了统一我们经常把输入层(layer0)叫做 向前传播(预测)
接下来看一下如何前向传播通俗点讲叫预测注意不包含训练
我们将预测图像显示的是1 or 0。
下面的一个图像是灰度像素展示是一个1。 我们按照行把每行首尾相连组合成一个8*864维的向量把它作为x(输入层)。
然后我们搭建我们的神经网络 计算过程 向前传播在python中实现 已知有上面的神经网络。 将这几个权重整合在一起
w np.array([[1, -3, 5],[2, 4, -6]
])
注意是两行三列 b np.array([-1, 1, 2]) a_in np.array([-2, 4]) 接下来要创建一个函数用来搭建每一层网络。
def dense(a_in, W, b, g):units W.shape[1] # 计算这一层有多少个单元a_out np.zeros(units) # 初始化输出for i in range(units):w W[:, i] # 取出W的第j列也就是第j个单元的w向量,注意这里取出的w是1D向量z np.dot(w, a_in) b[i] # 这里的a_in也是1D向量a_out[i]g(z) #g为激活函数return a_out
虽然已经有了网络但是如何将已经有的网络连接起来呢
还要建立一个函数
def sequential(x):a1 dense(x, W1, b1, g)a2 dense(a1, W2, b2, g)a3 dense(a2, W3, b3, g)a4 dense(a3, W4, b4, g)f_x a4return f_x
代码的高效实现
W np.array([[1, -3, 5],[2, 4, -6]
]) #不变
B np.array([[-1, 1, 2]]) #变成二维
X np.array([[-2, 4]]) #变成二维def dense(A_in, W, B):Z np.matmul(A_in, W) B #这个方法不支持标量A_out g(Z)return A_out 训练网络
对于下面网络 我们调用tensorflow库实现下面代码
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
model Sequential([Dense(units25,activationsigmoid)Dense(units15,activationsigmoid)Dense(units1,activationsigmoid)]
)
from tensorflow.keras.losses import BinaryCrossentropy
model.compile(lossBinaryCrossentropy)
model.fit(X,Y,epochs100)
注意这里的tensorflow由于版本问题可能不含keras,可以直接下载keras这个包。(自己搞了半天才研究出来大哭)
注意上面的步骤
model Sequential(..)model.compile(loss...)model.fit(X,y,epochs100)