zoukankan      html  css  js  c++  java
  • 自然语言分析——实验记录

    1.第一次试验:朴素贝叶斯,采用统计词数量方式处理数据conutVectorizer()

    (1)训练集12695条,

      正向:8274

      负向:4221

       哈工大停词表:df=3,正确率0.899,

                df=1,正确率0.9015

       四川大学停词表:df=1,正确率0.90035

    (2)训练集19106条

           正向:11747

      负向:7359

      哈工大停词表:df=1,正确率0.90153

    2.第二次实验:朴素贝叶斯,采用idf来处理评论数据TfidfVectorizer(),而TfidfTransformer()使用时出错。

      (1)训练集19106条

           正向:11747

      负向:7359

      哈工大停词表:df=1,正确率 0.899568

    3.第三次实验:朴素贝叶斯,采用统计词数量方式处理数据conutVectorizer()

       训练集19106条

           正向:11747

      负向:7359

        哈工大停词表:df=1

       (1)当数据向量化时,采用二元模型即conutVectorizer(ngram_range=(1,2))时出现MemeoryError错误,即内存不足。搜了原因是电脑的原因,再试试,用服务器运行。

       仍然一元模型训练集不变,把测试集中分类错误的改过来,以及语句模糊的文本删除后,正确率提升一点。

       正确率:0.9030612244897959

    (2)当把分词换成精确模式而不是全模式时,精确度提高0.006

      正确率:0.908948194662

    4.第四次试验 

    (1)训练测试集不变,改动countVectorizer可以统计长度为 1的词后两次实验,统计词频数量的贝叶斯正确率为0.905,而用tfidf贝叶斯后,正确率降低到0.76左右,显著下降,可能是因为一个字的词太多,而总的训练数据又不够,导致idf的值就会比较小,而单个字的词频却很大,所以导致单个字的词tfidf值比较大,严重影响各个词的重要性分布,所以实验分类结果效果很差。

    (2)训练测试集不变,朴素贝叶斯,采用统计词数量方式处理数据conutVectorizer(),正确率 0.9116954474097331

          训练测试集不变,朴素贝叶斯,采用tfidf理数据,正确率为0.9030612244897959。

    5.实验五

     (1)采用逻辑斯蒂回归sklearn.linear_model.LogisticRegression()采用默认的正则化即penalty='l2',优化方法solver='liblinear'时,正确率为0.9072691552062868

     (2)采用逻辑斯蒂回归sklearn.linear_model.LogisticRegression()采用l1正则化penalty='l1',优化方法solver='liblinear'时,正确率为0.9084479371316306,比上面的稍有提高。

     (3)采用逻辑斯蒂回归sklearn.linear_model.LogisticRegression()采用默认的正则化即penalty='l2',优化方法solver='lbfgs'时,正确率为0.9072691552062868

       (4)采用逻辑斯蒂回归sklearn.linear_model.LogisticRegression()采用默认的正则化即penalty='l2',优化方法solver='newton-cg'时,正确率为0.9072691552062868

       (5)采用逻辑斯蒂回归sklearn.linear_model.LogisticRegression()采用默认的正则化即penalty='l2',优化方法solver=' sag'时,正确率为0.906483300589391。预测准确率最差,可能是因为这个优化方法需要训练数据很大,一般大于十万条。

    6.实验六

    (1)采用svm来训练模型,训练测试数据都喝上一样,但由于计算时间长,取训练集的前一万条数据做训练,测试集不变,得到的正确率为0.6742632612966601

    时间为1170.129秒

    (2)正确率:0.6789783889980353

    时间为:11404.603873968124秒,即190分钟(三小时)

    (3)训练集为2000条,测试集为500条,当惩罚系数C为0.5时,正确率为0.004;C=1时正确率为0.004;C=2时正确率为0.004;C=10时正确率0.004.并不影响结果,说明这可能是个线性可分类所以惩罚想无影响。

    (4)训练集为5000条,测试集为1000条,当惩罚系数C为10时,正确率为0.244;C=1时正确率为也是0.244,不用调节这个系数了,对于结果没有啥影响。

    (5)训练5000条,测试2000多条,C=1,正确率0.6745283018867925,什么情况,增加测试数量会提升正确率???

    7.实验七

    (1)(phone_nlp1.py)多项式朴素贝叶斯,不特征提取,正确率为0.9058084772370487。特征5000个,正确率为0.9050235478806907。提取14000个,正确率         0.9046310832025117。

    (2)(phone_nlp2.py)多项式朴素贝叶斯,不特征提取,正确率为0.9116954474097331。特征提取5000个,正确率为 0.9058084772370487。

          特征提取10000个,正确率为:0.9054160125588697。提取14000个,正确率0.91287

    (3)(phone_nlp3.py)多项式朴素贝叶斯(tfidf),不特征提取,正确率为0.9030612244897959。

      特征提取10000个,正确率0.9030612244897959。

      特征提取14000个,正确率0.9030612244897959。

      正确率不变。

     (4)(phone_nlp_logisticRegress.py)逻辑回归采用默认的正则化即penalty='l2',优化方法solver=' sag'时,提取5000词,正确率0.9030612244897959。提取10000条。正确率0.9053045186640472。14000条,正确率0.906090373280943。

    (5)(phone_nlp_logisticRegress.py)采用逻辑斯蒂回归sklearn.linear_model.LogisticRegression()采用l1正则化penalty='l1',优化方法solver='liblinear'时,提取14000条,正确率为0.906090373280943。不提取特征,正确率0.9084479371316306。

     (6)(phone_nlp_logisticRegress.py)svm,C=100,训练集10000条,正确率0.8091872791519434,耗时: 514.3292860984802秒。

    c=1000,训练集10000条,正确率0.8532182103610675,耗时: 434.3683319091797。

    c=1000,训练集18000条,正确率,0.9089481946624803,耗时: 9087.535838365555秒(151分钟)。默认核函数kernel='rbf'

    c=1,训练集18000条,正确率0.9030612244897959,耗时: 1851.5224463939667(30分钟),核函数kernel='linear'。

    c=5,训练集18000条,正确率   0.8889324960753532,耗时: 2341.9452316761017,核函数kernel='linear',正确率下降了,说明有点过拟合了。

    c=2,训练集18000条,正确率 0.8963893249607535,耗时: 2061.1477530002594,核函数kernel='linear'。

    c=1.5,训练集18000条,正确率 0.9003139717425431耗时: 2035.7577958106995,核函数kernel='linear'。

    c=1.5,训练集18000条,本实验及上面的特征提取10000条,核函数kernel='linear

    正确率 0.9003139717425431
    召回率 0.9158134243458476
    F1 0.9268854346574553
    耗时: 2235.384289264679

     c=1,训练集18000条,特征提取14000条,核函数kernel='linear

    正确率 0.9014913657770801
    召回率 0.9197707736389685
    F1 0.9274776076278533
    耗时: 3104.536496400833

    c=1,特征不提取,核函数kernel='linear

    (7)(phone_nlp2.py)

    朴素贝叶斯,全部特征

    正确率 0.9124803767660911
    召回率 0.9287765651924181
    F1 0.935493202198438

    提取14000特征

    正确率 0.9116954474097331
    召回率 0.9272206303724928
    F1 0.9349898873158047

    特征提取10000条

    正确率 0.9050235478806907
    召回率 0.920662100456621
    F1 0.9302191464821221

    (8)svm,

    c=1,全特征,核函数kernel='linear

    正确率 0.8975667189952904
    召回率 0.918825561312608
    F1 0.9244135534317985

     c=1,训练集全部,特征提取14000条,核函数kernel='linear

    正确率 0.9014913657770801
    召回率 0.9197707736389685
    F1 0.9274776076278533
    耗时: 3104.536496400833

    c=1,特征10000条,

    正确率 0.9030612244897959
    召回率 0.9185185185185185
    F1 0.9288389513108615
    耗时: 2203.7621104717255

    c=1.5,特征提取10000条,核函数kernel='linear

    正确率 0.9003139717425431
    召回率 0.9158134243458476
    F1 0.9268854346574553
    耗时: 2455.3551800251007

    (9)逻辑斯蒂回归

    全特征时,

    正确率 0.9046310832025117
    召回率 0.9172804532577904
    F1 0.9301924734271761

    特征提取14000条时,

    正确率 0.9042386185243328
    召回率 0.9186575654152446
    F1 0.9297639608520437

    特征提取10000条时,

    正确率 0.9050235478806907
    召回率 0.919226393629124
    F1 0.9303396660909614

  • 相关阅读:
    LeetCode算法题-Sum of Two Integers(Java实现)
    LeetCode算法题-Valid Perfect Square(Java实现-四种解法)
    LeetCode算法题-Intersection of Two Arrays II(Java实现)
    LeetCode算法题-Intersection of Two Arrays(Java实现-四种解法)
    LeetCode算法题-Reverse Vowels of a String(Java实现-四种解法)
    LeetCode算法题-Reverse String(Java实现)
    LeetCode算法题-Power of Four(Java实现-六种解法)
    LeetCode算法题-Power Of Three(Java实现-七种解法)
    添加动态输出 Adding Dynamic Output 精通ASP-NET-MVC-5-弗瑞曼 Listing 2-7
    关于 退步编程 和 退步看书的思考
  • 原文地址:https://www.cnblogs.com/zz22--/p/9490375.html
Copyright © 2011-2022 走看看