Python深度学习之神经网络模型【附代码】_深度神经网络 代码(2)

本文介绍了sigmoid、tanh和ReLU三种激活函数的特点,讨论了它们在梯度消失问题上的表现,以及在多层神经网络中的应用。随后通过实例展示了如何使用Scikit-Learn库构建神经网络模型进行二分类和回归分析,最后以用户评论情感分析为例,详细阐述了数据预处理和模型搭建过程。
摘要由CSDN通过智能技术生成

Sigmoid函数:如右图所示,该函数是将取值为*(−∞,∞)*(-∞,∞)的数转换到(0,1)之间,可以用来做二分类。其导数 f′(x) 从0开始,很快就又趋近于0,所以在梯度下降时会出现梯度消失;而且sigmoid函数的均值是0.5而非0,不利于下一层的输出。

Tanh函数:如右图所示, Tanh函数将取值为*(−∞,∞)*(-∞,∞)的数转换到(-1,1)之间。当x很大或者很小的时候,导数 f′(x)也会很接近0,和sigmoid函数有同样的梯度消失的问题。但是tanh函数的均值为0,在这点上弥补了sigmoid函数均值为0.5的缺点。

Relu函数:如右图所示, Relu函数是一种分段线性函数,它在输入为正数时弥补了Sigmoid函数以及Tanh函数的梯度消失问题,但是输入为负数时仍然有梯度消失的问题。此外Relu函数的计算速度相对于Sigmoid函数和Tanh函数也较快一些,在实战应用中,Relu函数在神经网络模型中用的相对较广一些。

2、多层神经网络模型

实际应用中,常常采用如下图所示的多层神经网络,在多层神经网络模型中,输入层和输出层间可以有多层隐藏层,层与层之间互相连接,信号通过线性变换和激活函数的复杂映射,不断地进行传递。

(2)神经网络模型简单代码****实现

下面我们使用Scikit-Learn库中的MLP多层神经网络模型解决一个简单的二分类问题。数据如下,其中二维向量X是自变量,一维向量Y是因变量,其中Y的取值范围为0或1,代表两个不同的分类:

将数据通过神经网络模型进行拟合:

X = [[1, 0], [5, 1], [6, 4], [4, 2], [3, 2]]
y = [0, 1, 1, 0, 0]
mlp =MLPClassifier()
mlp.fit(X, y)

我们将这5个数据的预测值和实际值进行对比:

import pandas as pd
a = pd.DataFrame()  
a['预测值'] = list(y_pred)
a['实际值'] = list(y)

此时生成的对比表格如下所示,对该简单二分类问题的预测准确度达到了100%:

除了可以搭建神经网络分类模型外,神经网络模型还可以用于回归分析,神经网络回归模型简单代码演示如下所示:

from sklearn.neural_network import MLPRegressor
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [1, 2, 3, 4, 5]

model = MLPRegressor(random_state=123)  
model.fit(X, y)

print(model.predict([[5, 5]]))

2、案例**-** 用户评论情感分析

(1)背景

用户对电商产品的评价及评分中包含着用户的偏好信息,利用情感分析模型可以获取用户的情感以及对产品属性的偏好。在获取用户偏好的基础上,我们可以利用智能推荐系统向用户推荐更多他们喜欢的产品以增加用户的粘性,挖掘潜在利润。

(2)数据读取、中文分词、文本****向量化

我们可以用下面的代码读入数据并对单词进行分段:

import pandas as pd
df = pd.read_excel('产品评价.xlsx')
df.head()
import jieba
word = jieba.cut('我爱北京天安门')
for i in word:
    print(i)

这里我们通过print(words[0:3])来查看前3条评论的分词结果,如下图所示:

使用CountVectorizer()函数将分词后的结果文本向量化后,我们就可以把之前所有评论分词后的分词结果进行文本向量化了,其代码如下:

from sklearn.feature_extraction.text import CountVectorizer
test = ['手机 外观 漂亮', '手机 图片 清晰']
vect = CountVectorizer()
X = vect.fit_transform(test)
X = X.toarray()

此时的X如下图所示:

我们可以用如下代码查看其文本向量化后的词袋:

words_bag = vect.vocabulary_
print(words_bag)

结果如下图所示:

通过如下代码可以转换X成DataFrame格式,其中添加pd.set_option(‘display.max_columns’, None)这行代码可以显示所有列,如果将None改成500,则表示可最多显示500列;pd.set_option(‘display.max_rows’, None)可以设置显示所有行,如果将None改成500,则表示最多可显示500行。

import pandas as pd
pd.set_option('display.max_columns', None) 
pd.set_option('display.max_rows', None)  
pd.DataFrame(X).head()
(3)神经网络模型搭建与****使用
1、划分训练集和测试集

通过train_test_split()函数划分训练集和测试集,代码如下:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=1)
2、搭建神经网络模型

通过如下代码即可搭建简单的神经网络模型:

from sklearn.neural_network import MLPClassifier
mlp =MLPClassifier() 
mlp.fit(X_train, y_train)

此时获得的模型及相关默认参数如下图所示:

3、模型使用

通过如下代码即可预测测试集数据,并将预测值和实际值进行对比:

y_pred = mlp.predict(X_test)
print(y_pred)
a = pd.DataFrame() 
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)

测试集数据的预测准确度,可以使用如下代码:

from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
mlp.score(X_test, y_test)

还可以输入一些数据集以外的评价,看看模型是否会给我们准确的判断,代码如下:

comment = input('请输入您对本商品的评价:')
comment = [' '.join(jieba.cut(comment))]
print(comment)
X_try = vect.transform(comment)
y_pred = mlp.predict(X_try.toarray())
print(y_pred)

在这里我们可以输入一个注释并查看神经网络预测:

请输入您对本商品的评价:物流为什么这么慢,到手里都已经一周了。五星给手机,一星给物流。
['物流 为什么 这么 慢 , 到 手里 都 已经 一周 了 。 五星 给 手机 , 一星 给 物流 。']
[0]

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值