为了显示代码的友好性,我会把代码的每一步运行的结果显示出来,让读者可以有一个直观的认识,了解每一步代码的意思,下面我会先以几条数据为例,让读者可以直观的认识每段代码执行出来的效果,文章末我会已一个大数据集实验,并且给出实验效果,读者可以参考

一、  首先,笔者的数据存放在两个excel,一个是存放的是pos评论,一个是neg评论。分别是poss.xlsxnegg.xlsx,里面的内容如下:

poss.xls的内容是:

neg.xls的内容是:

二、  然后,读入数据了,具体代码如下

importnumpy as npimportpandas as pdpos= pd.read_excel('poss.xlsx', header=None)#读入数据到pandas数据框架
pos['label'] = 1#添加标签列为1
neg= pd.read_excel('negg.xlsx', header=None)neg['label'] = 0#添加标签列为0
all= pos.append(neg, ignore_index=True)#合并预料

View Code

print(all) 这段代码运行的效果是这样的:

接下来是分词了

cw=lambda s: list(jieba.cut(s))#调用结巴分词
all['words'] = all[0].apply(cw)

View Code

print(all['words'])这段代码运行的效果是这样的:

把所有的词组成一个大的词典

all['words'] =all[0].apply(cw)
content=[]for i in all['words']:content.extend(i)
abc= pd.Series(content).value_counts()

给每个词一个固定的编号

abc[:] = range(1, len(abc)+1)
abc[''] =0
maxlen=10
defdoc2num(s, maxlen):s= [i for i in s if i inabc.index]s= s[:maxlen] + ['']*max(0, maxlen-len(s))returnlist(abc[s])
all['doc2num'] = all['words'].apply(lambda s: doc2num(s, maxlen))

View Code

结果如下:

打乱数据,并且生成keras的输入数据

idx =range(len(all))
np.random.shuffle(idx)
all=all.loc[idx]
x= np.array(list(all['doc2num']))
y= np.array(list(all['label']))
y= y.reshape((-1,1)) 

View Code

首先,我们看下x里面的数据形式,如下图:

接下来就是用keras搭建卷积神经网络模型了

model =Sequential()
model.add(Embedding(len(abc), embedding_vecor_length,input_length=maxlen))
model.add(Convolution1D(nb_filter=nb_filter,filter_length=filter_length,border_mode='valid',activation='relu'))
model.add(GlobalMaxPooling1D())model.add(Dense(128))
model.add(Dropout(0.2))
model.add(Activation('relu'))model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit(X_train, y_train,batch_size=batch_size,nb_epoch=nb_epoch,validation_data=(X_test, y_test))

最后就是对1000条积极评论和1000条消极评论的情感分类代码了,代码如下:

from __future__ importprint_functionimportjiebaimportpandas as pdimportnumpy as np
np.random.seed(1337)  #for reproducibilityfrom keras.preprocessing importsequencefrom keras.utils importnp_utilsfrom keras.models importSequentialfrom keras.layers importDense, Dropout, Activation, Flattenfrom keras.layers importEmbeddingfrom keras.layers importConvolution1D, GlobalMaxPooling1D
embedding_vecor_length= 32maxlen=200min_count=5batch_size= 32nb_epoch=10nb_filter=128filter_length= 3pos= pd.read_excel('poss.xls', header=None)
pos['label'] = 1neg= pd.read_excel('negg.xls', header=None)
neg['label'] =0
all= pos.append(neg, ignore_index=True)
cw=lambdas: list(jieba.cut(s))
all['words'] =all[0].apply(cw)
content=[]for i in all['words']:content.extend(i)
abc=pd.Series(content).value_counts()
abc[:]= range(1, len(abc)+1)
abc[''] =0
defdoc2num(s, maxlen):s= [i for i in s if i inabc.index]s= s[:maxlen] + ['']*max(0, maxlen-len(s))returnlist(abc[s])
all['doc2num'] = all['words'].apply(lambdas: doc2num(s, maxlen))
idx=range(len(all))
np.random.shuffle(idx)
all=all.loc[idx]
x= np.array(list(all['doc2num']))
y= np.array(list(all['label']))
y= y.reshape((-1,1))
train_num=1600X_train=x[:train_num]
y_train=y[:train_num]
X_test=x[train_num:]
y_test=y[train_num:]
model=Sequential()
model.add(Embedding(len(abc), embedding_vecor_length,input_length=maxlen))
model.add(Convolution1D(nb_filter=nb_filter,filter_length=filter_length,border_mode='valid',activation='relu'))
model.add(GlobalMaxPooling1D())model.add(Dense(128))
model.add(Dropout(0.2))
model.add(Activation('relu'))model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit(X_train, y_train,batch_size=batch_size,nb_epoch=nb_epoch,validation_data=(X_test, y_test))
score, acc= model.evaluate(X_test, y_test,verbose=0)print('Test score:', score)print('Test accuracy:', acc)print('Train...')model.fit(X_train, y_train, batch_size=batch_size,nb_epoch=nb_epoch,validation_data=(X_test, y_test))
score, acc= model.evaluate(X_test, y_test,verbose=0)print('Test score:', score)print('Test accuracy:', acc)

结果如下:

转载于:https://www.cnblogs.com/qianboping/p/6492438.html

keras小程序(一),用cnn做分类相关推荐

  1. 小程序快速开发怎么做?

    说到小程序快速开发,大多数小伙伴会更加关注两个方面.一是成本.另一个是开发难度.开发一个小程序要花多少钱?制作一个小程序必须掌握深奥的专业技术吗?事实上,现在可以快速快发自己的小程序哦!下面为小程序快 ...

  2. 【小程序源码】多分类经典语录下载支持一键复制带壁纸,王者改名等功能

    这是一款主要以各类语录分享的一款小程序源码 比如有:舔狗日记,土味情话,别味情话,励志鸡汤 内容支持一键复制分享,可以随时切换下一个内容 另外还有壁纸功能(属于自动采集) 还有王者荣耀空白名修改,重复 ...

  3. 为什么做小程序的时候要做定制开发小程序?

    当你想要做小程序的时候,你便面临很多种不同的选择: 其一,选择展示类小程序,自己就可以做,仅有展示用途. 其二,选择模板小程序,有商城等功能. 其三,选择定制一个小程序,找专门做小程序的服务商. 我们 ...

  4. 小程序海外也能做吗?小程序海外主体公司开发的案例

    2019年元旦前后,微信海外开发者大赛(下称"WDC大赛")第二站登陆德国柏林,象征着小程序生态进一步扎根欧美. 海外小程序发展情况: 大赛现场,微信团队公布了最新数据: 海外小程 ...

  5. 微信小程序业务好(做)跑吗?我想做小程序代理业务

    微信小程序业务好(做)跑吗 ? 说真的你得看当地市场是个什么样的环境,如果你本地商场的商家都对微信小程序不温不火,漠不关心的话,你再怎么苦口婆心,说一大堆的好处,我相信他们还是会无动于衷的,这种市场跑 ...

  6. 小程序发布一年做了什么?错过将遗憾数年的3个大势

    详情 小程序风口的产生与移动互联网流量红利逐渐消逝关系密切.移动端用户的争夺,已从增量市场转向存量市场,从抢占用户转向抢占用户时间.然而,却有一块尚未完全开化的巨大流量池-微信小程序.随势而动,仅一发 ...

  7. 微信扫码下单小程序怎么弄(做扫码下单小程序的方法)

    很多粉丝朋友咨询我们说:自己想要弄个微信扫码下单的小程序该怎么弄?本文小编就给大家分享一下做扫码下单小程序的方法. 做个扫码下单小程序之前,我们首先要清楚自己的行业以及自己的产品或者服务是哪种类型.然 ...

  8. 新手如何用微信小程序和云数据库做一个论坛?【帖子页】

    新手小白用微信小程序和云数据库做一个论坛[帖子页] 先放个效果图 由于后面换了头像,所以评论的头像和发帖的头像不一样. 要做个同款论坛,首先需要用到云数据库.在微信开发者工具的左上角开通云开发就可以了 ...

  9. 自动采集头像大全微信小程序源码支持多分类多种流量主

    这是一款以头像为主的一款微信小程序源码 该小程序内包含了各种分类,各种样式都有 可以说是目前最全的一款头像小程序源码 五大分类情侣,女生,男生,卡通,风景 每大分类下面都有N个小分类,每个小分类下面有 ...

  10. 【小程序源码】自动采集头像大全微信小程序源码支持多分类

    这是一款以头像为主的一款微信小程序源码 该小程序内包含了各种分类,各种样式都有 可以说是目前最全的一款头像小程序源码 五大分类情侣,女生,男生,卡通,风景 每大分类下面都有N个小分类,每个小分类下面有 ...

最新文章

  1. robotframework ie浏览器中click button不可用_RobotFramework自动化Selenium2Library库常用关键字...
  2. C++ 快速入门笔记:基本语法
  3. 130242014076+陈旭+第3次实验
  4. UNIX再学习 -- 静态库与共享库
  5. EOSIO:EOSIO最新版1.4.0 钱包开发环境搭建
  6. 【React 基础】之 React 基本介绍、jsx 规则、模块与组件
  7. 小红书回应赴港IPO:暂无明确计划
  8. 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍
  9. 读caffe源码:gflags的使用
  10. Python中的变量、引用、拷贝和作用域
  11. win7 安装 vmware出错: failed to create the requested registry key key installer error 1021 的解决办法。...
  12. 我们玩游戏,还是游戏玩我们……
  13. ASP.net的简单认识
  14. Python数据字典处理Excel,并统计总数,画出饼图
  15. 数学建模评价类方法02——层次分析法
  16. js 检测浏览器开发者控制台是否被打开
  17. Tomcat虚拟主机配置示例
  18. 14 Python 办公自动化
  19. hcia完结 静态路由综合实验
  20. 幻方问题__技巧解法

热门文章

  1. Android Multimedia框架总结(二十六)利用FFmpeg进行解码直播流
  2. python文件处理——JSON格式文件
  3. java并发程序死锁检测_Java并发:隐藏的线程死锁
  4. html鼠标各种坐标,各种MOUSE鼠标形状的表示方法
  5. 数据库不存在 php报错,在php中需要用到的mysql数据库的简单操作,phpmysql
  6. java jdbc连接_CPT201 ODBC与JDBC比较
  7. outlook搜索栏跑到上面去了_南昌搜索引擎seo优化
  8. mysql死锁抛出异常_如何排查和处理 MySQL 死锁异常?详细分析及解决方法步骤
  9. 计算机学院学生会会徽设计,学生会会徽设计策划书
  10. CS224N笔记——RNN和语言模型