本周主要学习笔记:
1、eval 和exec
  区别:有无返回值
2、生成器和迭代器
  区别:迭代器是所有内容都在内容中,使用next函数依次遍历。
        生成器不会把内容放在内存中,每次调用next的时候返回的都是每次计算的结果,用完之后立刻销毁。
  生成器函数:
    yield关键字实现
3、工厂函数
  利用现象对象的**,传入不同的参数输出不同的结果
  利用偏函数实现工厂函数
    def f1(*args,**kwargs):
      pass
    def f2():
      return f1(*,**)
    def f3():
      return f1(*,**)

  闭合函数/闭包函数
    函数嵌套,外部作用域变量,返回值内层函数
    比如:
    def outer(f):
      def inner(*,**):
        pass
      return inner
  装饰器:本质是一个闭包函数,
    在原有函数的外面包装一层函数,是新函数在返回原有函数之前实现一些功能。
    重点:多个装饰器的执行顺序(在之前的内容中一直不明白为什么装饰器的执行的顺序很奇怪,下面的一句话即可解决疑惑。)
      装饰器的加载顺序是从下往上,在调用时,执行函数顺序是从下往上的。
4、元类METAClass
  type 动态的创建简单的类
  创建复杂的类需要使用元类
  参考代码:metaclass.py
5、机器学习(损失函数)
  求解机器学习模型参数最优解问题:最小二乘法、梯度下降
  最小二乘法**:
    一种统计学习优化技术,他的目标是最小化误差平方之和来作为目标,从而找到最优模型,这个模型可以拟合观测数据。
    回归学习中,常用损失函数是平方损失函数,在此情况下,回归问题可以用著名的最小二乘法来解决。
    目标公式:
      J = ∑(f(x) - Y)
      其中 f为模型值,Y为观测值
    最小二乘法就是使得J的值最小化。
    最小二乘法利用是把目标函数化为矩阵运算问题,然后求导使其等于0,从而求得极值。
  随机梯度下降:
    思路:对参数向量求导,使得梯度为0,然后得到参数变量的迭代更新公式。
    W : = W - a*参数偏导  其中a为学习率
  二者区别:
    最小二乘法是直接对\Delta求导找出全局最小,是非迭代法。而梯度下降法是一种迭代法,先给定一个\beta ,
    然后向\Delta下降最快的方向调整\beta ,在若干次迭代之后找到局部最小。梯度下降法的缺点是到最小点的时候收敛速度变慢,
    并且对初始点的选择极为敏感。
6、深度学习优化算法
  Mini-Batch梯度下降法(SGD)
    训练集被分割为小的子训练集,这些字训练集被称为mini-batch。假设每个子训练集有1000个训练集合,那么先去前1000个开始训练,
    再取接下来的1000个继续训练,以此类推
    当每个mini-batch为1时,演变为随机梯度下降。此时每次只取一个样本进行训练。当mini-batch大小为训练数据本身时,得到
    批梯度下降。
  动量梯度下降法:momentum
    由于Mini-batch 梯度下降使用子集进行参数更新,所以更新的方向跟普通的批梯度下降有些不同,而是有一些变化,(不同的数据子集在
    进行梯度下降时,可能会使损失函数值上升,但总体趋势是下降的,因此mini-batch梯度下降的路径将会由震荡到收敛),使用动量优化算法
    可以减少震荡。
    动量优化使用参数在一定程度上按照之前变化的变化方向进行更新,使参数更稳定的更新。
    优点:
      下降初期,使用上一次参数更新,下降方向一致,乘一较大的参数能都进行很好的更新。
      下降中期,在局部最小值来回震荡的时候,梯度为0,u使得更新幅度增大,能够跳出陷阱。
      在梯度改变方向的时候,u能够减小更新。总之动量可以在相关方向上加速梯度下降,抑制震荡,从而加速收敛。
  Adagrad
    基于梯度的优化算法,对不同的参数跳帧学习率,对低频出现的参数进行大的更新,最高频出现的参数进行小的更新。

7、文本相似度(未完成)

8、python collection 模块
  1、namedtuple()生成可以使用名字访问元素内容的子类
  2、deque双端队列,可以快速的从一端追加退出的对象
  3、Counter 计数器
  4、OrderedDict有序字典
  5、defaudict带有默认值的字典
  参考代码:py_collection_module.py

9、nlp情感分析
  常见两种方式:基于情感词典的方法、基于机器学习的方法
  基于情感词典的文本情感分析
    通过情感打分的方式进行文本情感判断,重点是根据词典打分
      情感词典和对应分数,比如波森nlp词典:词典把所有的常用词打上唯一的分数。
      缺点:不带情感词的停用词会影响文本情感打分。
           中文词性的多变,一些词在不同的语境中有相反的意思。
           另外,同一个词不同的词性也具有不同的意思。
      否定词典,比如:不,无,非,否,别,难道等。
      程度副词词典,对程度副词进行打分,强化或者弱化情感词,比如 ,百分之百,2分,及其2分等等。
      停用词词典。需要去除。
    数据预处理
      分词
        结巴分词
        nltk
        复旦
        中科院
      去除停用词
    构建模型
      将词语分类并标注位置:将句子中各类词进行分类并标注位置。
      计算句子得分:定义一个情感词语组,两个情感词之间的所有否定词和程度副词与这两个情感词的后一个构成情感词组。
  基于机器学习的文本情感分析
    预处理:分词,去除停用词,训练词向量等。
      重点:将每条数据词语转换为数值向量
        常见方式:
          词袋模型
            向量中每个分量表示词典中对应单词在文档中出现次数。
            缺点:
              稀疏矩阵,维度灾难,忽略词语之间的联系
          tf-idf
            词频做为衡量单词的重要性,对位置没有敏感性。
          词向量
            词向量空间上的相似度用来表示文本语义上的相似度。
            CBOW:根据上下文预测位置t的单词概率
            skip—gram :用于预测位置t的上下文单词。