[深度学习]案例-情绪预测

一、模型的基本框架

封装成类
  • __init__

添加参数:
+统计min_count
+阈值polarity_cutoff

  • pre_process_data

只分析频次大于min_count & 比例大于polarity_cutoff阈值的单词

  1. 算法关键点:反向传播过程中分两步 error+errorterm(delta)

梯度下降的计算:对y_hat的偏导的负数(相减更新权重)

  • y_hat−y 权重更新的符号是负号
  1. 权重的初始化
  2. 判断分类是否正确

分类正确时对应特定概率

  • 标签为Pos时,概率>0.5
  • 标签为Neg时,概率<0.5

二、模型优化

  1. 反馈调整:区分信号与噪声
    数据挖掘:有时候问题不在于挖掘机,在于选择挖掘的位置/方向
  • 作者的思路

避免无关信息的权重影响:权重统一设置为1

  • me思路

删除无关符号/单词:耗费力气,且治标不治本

  • “本”:神经网络的结构设置

+节点设置
+网络连接方式

  1. 单词频次出现的次数@二阶统计

比如最频繁出现的单词频次为336713,但观察后发现这个频次数只出现1次:可能是普遍存在的噪音,比如空格号,冠词the等

而频次(某个数字)出现最高的次数为27656,对应频次为1:即只出现一次的单词,比如电影中的人名

三、经验:代码规范

  1. 知识点-编程
  • collections.Counter()
    自动统计单词列表中的频率:生成字典
    .most_common()

  • map(lambda , )
    行列级操作:map针对读取的每一行文本进行lambda操作

    map:针对行列级的lambda操作

  1. 知识点-数学
  • 内积表示相似性

  • 统计-TSNE
    非线性降维

    相似性:距离按照t分布——>形成右侧的相似性矩阵
    统计-TSNE
  • 特征工程:数据转化
    三类词:中性词,pos,neg
    比例:用来体现倾向性,以1为分界;转化为log后,以0为分界

  1. 编程技巧
  • 命名:对象清晰+操作直观
    lay_n_input
    lay_n_output
    lay_n_error(y−y_hat)
    lay_n_delta(δ)

  • 添加判断:针对明显的前提
    1)状态属性
    assert(len(training_reviews) == len(training_labels))
    2)存在归属
    if(word in self.word2index.keys()):

  • 运行时间统计
    start = time.time()

  • 全局变量慎用
    定义全局变量后,中途数据类型的改变(标量——>列表)会引起错误
    注意用类中定义的函数和属性:需要添加self.

  • 内存管理
    事先知道变量的维度时:给变量分配预存空间,并进行初始化@lay_0
    (而不是边创建,边开辟新的空间@list.append())

  • 优化数据运算:针对0-1变量(开关数据)
    0属于无关运算
    1的统计:直接相加

四、经验:反省

  1. 任何事情/解决问题等的第一要点
    认识、了解对象

  2. 你以为的对象是你以为的那样吗?
    mlp.pos_neg_ratios_cutoff.most_common() 返回对象:元组的列表(不是表示第一列的单词:而是第一个元组)

    返回对象:元组的列表

  3. enjoy探索的过程@80%工作在于数据整理

  4. 作者的思路

  • 基于初始的思路:调整某些设置(完成后再迭代优化)
  • 用几个实验的样例:验证自己的思路 逻辑是否正确
    噪声占权重太大,覆盖有效信号

你可能感兴趣的:([深度学习]案例-情绪预测)