三十七、利用支持向量机做文本分类



从上一节提取出的全部特征中选取出关键的特征,并利用支持向量机对测试样本做回归计算,判断准确率

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

选取出关键特征

通过tf-idf计算出来的数值是某个特征(词)对于这篇文档的权重,不代表这个特征(词)在文本分类中的权重。这很容易理解,比如某一个特征(词)在多个分类中的tf-idf是不一样的,但是这个特征对于这个分类问题的权重肯定是一个定值。

选取重要的特征的方法可以是:1.)按tf-idf排序从大到小选topN;2)按特征的普遍性选取(在多个类别中出现过);3)按特征在不同文档中tf-idf的差距选择;

我们这次采取结合的形式:在至少2个类别中tf-idf大于0,同时在多个类别中第一名高于第二名10%以上。这么选择的原因是:我的总类别一共5种比较少,所以2个类别以上就说明具有普遍性了,你可以根据你的类别数目调整,第一名高于第二名10%表示这个特征具有一定的区分度。

修改我们的feature_extract.py如下:

def feature_dump():
    cursor = conn.cursor()
    category={}
    category[0] = 'isTec'
    category[1] = 'isSoup'
    category[2] = 'isMR'
    category[3] = 'isMath'
    category[4] = 'isNews'

    corpus=[]
    for index in range(0, 5):
        sql = "select segment from CrawlPage where " + category[index] + "=1"
        print sql
        cursor.execute(sql)
        line = ""
        for result in cursor.fetchall():
            segment = result[0]
            line = line + " " + segment
        corpus.append(line)

    conn.commit()
    conn.close()

    vectorizer=CountVectorizer()
    csr_mat = vectorizer.fit_transform(corpus)
    transformer=TfidfTransformer()
    tfidf=transformer.fit_transform(csr_mat)
    word=vectorizer.get_feature_names()
    print tfidf.toarray()

    for index in range(0, 5):
        f = file("tfidf_%d" % index, "wb")
        for i in np.argsort(-tfidf.toarray()[index]):
            if tfidf.toarray()[index][i] > 0:
                f.write("%f %s\n" % (tfidf.toarray()[index][i], word[i]))
        f.close()
def feature_extraction():
    d = {}
    for index in range(0, 5):
        f = file("tfidf_%d" % index, "r")
        lines = f.readlines()
        for line in lines:
            word = line.split(' ')[1][:-1]
            tfidf = line.split(' ')[0]
            if d.has_key(word):
                d[word] = np.append(d[word], tfidf)
            else:
                d[word] = np.array(tfidf)

        f.close();
    f = file("features.txt", "wb")
    for word in d:
        if d[word].size >= 2:
            index = np.argsort(d[word])
            if float(d[word][index[d[word].size-0-1]]) - float(d[word][index[d[word].size-1-1]]) > 0.01:
                f.write("%s %s\n" % (word, d[word]))
    f.close()

if __name__ == '__main__':
    #get_segment();
    feature_dump();
    feature_extraction();

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

最终输出的features.txt中有809个特征供我们使用,如下:

集群 ['0.027741' '0.014016' '0.010606']
分类器 ['0.002870' '0.045052' '0.000943']
中心 ['0.008167' '0.001647' '0.004274' '0.006954' '0.031360']
首席 ['0.003015' '0.017036']
fit ['0.016885' '0.000284']
懂得 ['0.035888' '0.001629' '0.003064']
密度 ['0.002414' '0.002106' '0.015073' '0.001586']
master ['0.021045' '0.002002' '0.000471']
对方 ['0.002414' '0.020451' '0.001684' '0.003569']
物品 ['0.020088' '0.001158' '0.001414']
……

 

研究scikit-learn SVM的使用

利用支持向量机模型可以直接使用scikit-learn,下一节我们再来研究一下scikit-learn的支持向量机怎么用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
支持向量机(Support Vector Machine, SVM)是一种广泛应用的分类算法,用于文本分类。在SVM中,数据被映射到高维空间,并找到一个最优超平面,将不同类别的数据分开。在文本分类中,SVM可以用于将文本数据分为不同的类别,如垃圾邮件和非垃圾邮件。 在应用SVM进行文本分类时,首先需要进行数据预处理。例如,在垃圾邮件分类中,可以使用SpamAssassin Public Corpus数据集。该数据集包括两个文件夹,分别代表垃圾邮件和非垃圾邮件。每个文件夹下包含多个txt文件,每个txt文件代表一封邮件。在预处理过程中,我们需要将这些txt文件读取并进行一些操作,例如去除停用词、标记化、词干提取等。 接下来,可以使用支持向量机算法对预处理后的文本数据进行分类。在SVM中,我们需要构建一个目标函数来寻找最优的决策边界,即分类线。这条分类线需要到两个类别最近的样本点最远,并且通过一些支持向量点(距离决策边界最近的点)来确定其位置。通过最大化间隔(margin),SVM可以找到最优的分类线,从而对文本进行准确分类。 总结来说,支持向量机是一种常用的文本分类算法,它通过映射数据到高维空间,并找到一个最优超平面将不同类别的文本数据分开。在SVM的应用中,数据预处理是很关键的一步,通过构建目标函数并利用支持向量来确定分类线的位置,SVM可以实现准确的文本分类。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [文本分类支持向量机SVM详解(6)机器学习](https://blog.csdn.net/qq_34516746/article/details/124673023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [基于流形正则化的支持向量机文本分类 (2013年)](https://download.csdn.net/download/weixin_38742520/19072551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [机器学习算法:利用支持向量机文本分类](https://blog.csdn.net/ai52learn/article/details/132074379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值