利用sklearn做文本分类(特征提取、knnsvm聚类)

合集下载

文本聚类过程

文本聚类过程

文本聚类过程文本聚类是一种将文本数据分组的技术,它可以将相似的文本归为一类,从而更好地理解和分析文本数据。

文本聚类过程包括以下几个步骤:1. 数据预处理在进行文本聚类之前,需要对文本数据进行预处理。

预处理包括去除停用词、词干提取、词向量化等步骤。

去除停用词是指去除一些常见的无意义词汇,如“的”、“是”等。

词干提取是指将单词的不同形态转化为其基本形式,如将“running”转化为“run”。

词向量化是指将文本数据转化为向量形式,以便于计算相似度。

2. 特征提取在进行文本聚类之前,需要将文本数据转化为特征向量。

常用的特征提取方法包括词袋模型、TF-IDF模型等。

词袋模型是指将文本数据转化为一个词汇表,然后统计每个单词在文本中出现的次数,将其转化为向量形式。

TF-IDF模型是指将每个单词的重要性加权,以便于更好地区分不同的文本。

3. 相似度计算在进行文本聚类之前,需要计算文本之间的相似度。

常用的相似度计算方法包括余弦相似度、欧几里得距离等。

余弦相似度是指将文本向量进行归一化,然后计算它们之间的夹角余弦值。

欧几里得距离是指计算文本向量之间的欧几里得距离。

4. 聚类算法在进行文本聚类之前,需要选择合适的聚类算法。

常用的聚类算法包括K-Means算法、层次聚类算法等。

K-Means算法是一种基于距离的聚类算法,它将文本数据分为K个簇,每个簇的中心点是该簇中所有文本向量的平均值。

层次聚类算法是一种基于相似度的聚类算法,它将文本数据分为一棵树形结构,每个节点代表一个簇,节点之间的距离表示簇之间的相似度。

5. 聚类评估在进行文本聚类之后,需要对聚类结果进行评估。

常用的聚类评估指标包括轮廓系数、互信息等。

轮廓系数是指将每个文本向量与其所属簇中其他文本向量的相似度与该文本向量与其他簇中文本向量的相似度进行比较,以评估聚类结果的质量。

互信息是指将聚类结果与真实标签进行比较,以评估聚类结果的准确性。

文本聚类是一种重要的文本分析技术,它可以帮助我们更好地理解和分析文本数据。

文心一言 文本分类

文心一言 文本分类

文心一言文本分类文心一言是一个开源的短文本分类数据集,用于进行文本分类任务。

它包含了一系列短文本和相应的标签,可用于训练和评估文本分类模型。

以下是使用 Python 进行文本分类的示例代码,使用了文心一言数据集和scikit-learn库:from sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.svm import SVCfrom sklearn.metrics import classification_reportfrom sklearn.model_selection import train_test_splitimport pandas as pd# 读取文心一言数据集data = pd.read_csv('文心一言.csv')# 将文本和标签分别存储在X和y中X = data['text']y = data['label']# 将文本转换为TF-IDF特征向量表示vectorizer = TfidfVectorizer()X_tfidf = vectorizer.fit_transform(X)# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X_tfidf, y, test_size=0.2, random_state=42)# 训练支持向量机分类模型svm_model = SVC()svm_model.fit(X_train, y_train)# 在测试集上进行预测y_pred = svm_model.predict(X_test)# 输出分类报告print(classification_report(y_test, y_pred))这段代码首先使用pandas库读取文心一言数据集,并将文本和标签分别存储在X和y中。

利用SVM进行文本分类并研究特征选择对文本分类的影响

利用SVM进行文本分类并研究特征选择对文本分类的影响

利用SVM进行文本分类并研究特征选择对文本分类的影响SVM(支持向量机)是一种常用于文本分类的机器学习算法。

它的主要思想是将文本数据映射到高维向量空间,并在此空间中构建一个超平面来实现分类。

特征选择是在特定的文本分类任务中选择最相关特征的过程。

本文将研究特征选择对SVM文本分类的影响。

一、SVM文本分类的基本步骤SVM文本分类的基本步骤包括数据预处理、特征提取、特征选择和模型训练四个主要阶段。

1.数据预处理:这一步骤包括去除文本中的停用词、标点符号等无用信息,同时进行词干化和词向量化处理,将文本转换为向量表示。

2.特征提取:常用的特征提取方法有词袋模型和TF-IDF模型。

词袋模型统计文档中每个词的出现频率,将其构成一个向量。

TF-IDF模型基于词袋模型,加入了对词频的权重调整,更准确地反映了词对文档的重要性。

3.特征选择:特征选择是从所有特征中选择最有用的特征,以提高分类器的性能。

常用的特征选择方法有信息增益、卡方检验和互信息等。

4.模型训练:最后,使用选择的特征和标注的训练集来训练SVM分类器,通过调整超参数,如正则化参数C和核函数类型等,来优化模型的性能。

特征选择在SVM文本分类中起着至关重要的作用,它能够减少特征维度,提高分类效果。

以下是特征选择对文本分类的影响:1.维度减少:文本数据往往具有高维度,而很多特征无关或冗余。

通过特征选择可以减少特征维度,消除冗余信息,提高计算效率。

2.加快训练速度:特征选择可以减少训练样本的数量,从而缩短SVM 模型的训练时间。

特征选择能够剔除一些对分类任务无关的特征,使得模型更快速地收敛。

3.提高分类性能:特征选择有助于找到与分类任务最相关的特征,去除冗余和噪声,从而提高分类器的泛化能力和分类性能。

4.解释性:选择最相关的特征可以增加对分类结果的可解释性。

通过特征选择,我们可以更好地理解哪些特征对分类有贡献,有助于进一步分析文本数据的规律和特点。

三、特征选择方法1.信息增益:信息增益是通过比较每个特征与分类结果之间的关联性来衡量特征的重要性。

文本类型数据的特征提取以及相似度计算

文本类型数据的特征提取以及相似度计算

文本类型数据的特征提取以及相似度计算随着信息技术的发展,文本数据不断增长,如何从大量的文本数据中提取有用的信息成为一项重要任务。

而文本特征提取和相似度计算是解决这一问题的关键步骤。

一、文本特征提取特征提取是将文本数据转化为计算机可以处理的数值向量的过程。

常用的文本特征提取方法有:1.词袋模型(Bag-of-Words):将文本看作是由词汇组成的集合,构建一个词汇表,然后统计每个词汇在文本中的出现频率。

这种方法忽略了词汇的顺序和语法结构,只关注词汇的频率。

2.TF-IDF:TF-IDF(Term Frequency-Inverse Document Frequency)是一种衡量词汇在文本中重要性的方法。

它通过计算词频和逆文档频率的乘积来衡量词汇在文本中的重要程度。

3.Word2Vec:Word2Vec是一种基于神经网络的词嵌入模型,可以将词汇映射到一个低维向量空间中。

这种方法能够捕捉词汇之间的语义关系,同时保留了词汇的语法结构。

二、相似度计算相似度计算是衡量文本之间相似程度的方法。

常用的相似度计算方法有:1.余弦相似度:余弦相似度是通过计算两个向量之间的夹角余弦值来衡量它们的相似程度。

在文本特征提取中,可以将文本表示为向量,然后计算它们之间的余弦相似度。

2.编辑距离:编辑距离是衡量两个字符串之间相似程度的方法。

它通过计算将一个字符串转换为另一个字符串所需的最少编辑操作次数来衡量它们的相似程度。

3.基于语义的相似度:基于语义的相似度是通过计算两个文本之间的语义距离来衡量它们的相似程度。

常用的方法有基于词向量的相似度计算和基于语义网络的相似度计算。

三、应用场景文本特征提取和相似度计算在许多领域都有广泛的应用。

以下是一些常见的应用场景:1.文本分类:通过提取文本的特征,并计算不同文本之间的相似度,可以实现文本的自动分类。

例如,可以将新闻文章分类为政治、经济、体育等不同类别。

2.信息检索:通过计算查询文本和文档之间的相似度,可以实现信息的准确检索。

物联网-机器学习模型调优与优化考试

物联网-机器学习模型调优与优化考试

物联网-机器学习模型调优与优化考试(答案见尾页)一、选择题1. 在物联网应用中,机器学习模型的训练数据通常包括哪些方面?A. 输入特征和输出标签B. 输入特征和部分输出标签C. 部分输入特征和输出标签D. 全部输入特征和全部输出标签2. 以下哪种方法不属于常见的机器学习模型调参策略?A. 网格搜索B. 随机搜索C. 贝叶斯优化D. 遗传算法3. 在Python中,用于导入scikit-learn库的关键字是什么?A. importB. fromC. import scikit-learn as sklearnD. import sklearn4. 以下哪些算法可以用于处理分类问题?A. SVMB. KNNC. Decision TreeD. Random Forest5. 以下哪个指标可以用来评估模型的准确性?A. F1值B. ROC曲线C. 精确度6. 在Keras中,如何对模型进行编译?A. pile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])B. model.fit(X_train, y_train, epochs=10)C. model.evaluate(X_test, y_test)D. model.predict(X_new)7. 在Python中,用于创建字典的关键字是什么?A. dict()B. create()C. dict{}D. new8. 以下哪些技术可以帮助提高模型的泛化能力?A. 数据增强B. 集成学习C. 正则化D. Dropout9. 在Scikit-learn中,如何实现交叉验证?A. cross_val_scoreB. cross_validateC. cross_validationD. cross Validation10. 以下哪些算法属于监督学习算法?A. SVMB. KNNC. Decision TreeD. Random Forest11. 以下哪种方法不属于无监督学习算法?A. K-MeansB. PCAD. Random Forest12. 在Python中,用于导入Pandas库的关键字是什么?A. import pandas as pdB. import pandasC. pandasD. pandas []13. 以下哪些算法可以用于回归问题?A. SVMB. KNNC. Decision TreeD. Random Forest14. 以下哪个函数是用于生成随机训练样本的?A. train_test_splitB. random_stateC. seedD. train_test_split15. 以下哪种方法可以用于降低过拟合的风险?A. 增加训练集大小B. 使用正则化C. 减小网络深度或宽度D. 增加学习率16. 在Keras中,以下哪项不是常用的损失函数?A. binary_crossentropyB. mean_squared_errorC. categorical_crossentropyD. hinge17. 以下哪种模型适用于文本分类问题?B. KNNC. Decision TreesD. Neural Networks18. 在Python中,以下哪种方法用于创建决策树?A. decisionTreeClassifierB. treeC. DecisionTreeD. classify19. 在Scikit-learn中,以下哪种方法可以用于降维?A. PCAB. t-SNEC. autoencodersD. dimension reduction20. 以下哪些算法可以用于聚类?A. K-MeansB. DBSCANC. AgglomerativeClusteringD. HierarchicalClustering21. 以下哪种模型适用于时间序列预测问题?A. SVMsB. LSTMC. GRUD. Decision Trees22. 在Python中,以下哪种方法用于导入NumPy库?A. import numpy as npB. import numpyC. NumpyD. np23. 以下哪些算法可以用于降维?B. t-SNEC. autoencodersD. dimension reduction24. 以下哪种模型适用于图像分类问题?A. SVMsB. Convolutional Neural Networks (CNNs)C. Decision TreesD. Random Forests25. 在Keras中,以下哪种层可以用于实现卷积神经网络?A. DenseB. Conv2DC. MaxPooling2DD. Flatten26. 以下哪种方法可以用于生成特征向量?A. one-hot encodingB. PCAC. t-SNED. autoencoders27. 以下哪些算法可以用于特征提取?A. SVMsB. KNNC. Decision TreesD. Random Forests28. 在Scikit-learn中,以下哪种方法可以用于生成随机搜索空间?A. GridSearchCVB. RandomizedSearchCVC. BayesianOptimizationD. grid_search29. 以下哪种模型适用于多类别分类问题?B. Decision TreesC. Random ForestsD. Support Vector Machines with a softmax output layer30. 在Python中,以下哪种函数可以用于计算两个数组的相似度?A. cosine similarityB. euclidean distanceC. jaccard similarityD. mitochondrial similarity31. 以下哪种方法可以用于处理缺失值?A. 删除缺失值B. 填充缺失值C. 均值 imputationD. 中位数 imputation32. 以下哪种模型适用于文本分类问题?A. SVMsB. KNNC. Decision TreesD. Neural Networks33. 在Keras中,以下哪种方法可以用于调整模型参数?A. model.fit(X_train, y_train, epochs=10)B. pile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])C. model.predict(X_test)D. model.evaluate(X_test, y_test)34. 以下哪些指标可以用于评估模型的性能?A. accuracyB. precisionC. recallD. F1 score35. 在Scikit-learn中,以下哪种方法可以用于获取特征重要性?A. feature_importances_B. importance_values_C. feature_selectorD. feature_selection36. 以下哪些算法可以用于生成树的表示形式?A. NP树B. AVL树C. B+树D. 决策树37. 以下哪种模型适用于回归问题?A. SVMsB. KNNC. Decision TreesD. Random Forests38. 在Python中,以下哪种方法可以用于创建字典?A. dict()B. create()C. dict{}D. new39. 以下哪种方法可以用于生成二进制序列?A. str.zfill()B. str.bfill()C. str.rjust()D. str.center()40. 以下哪种算法可以用于降维?A. PCAB. t-SNEC. autoencodersD. dimension reduction二、问答题1. 什么是物联网?2. 什么是机器学习?3. 什么是物联网机器学习模型?4. 为什么需要对物联网机器学习模型进行调优和优化?5. 如何对物联网机器学习模型进行调优?6. 什么是超参数调优?在物联网机器学习中,如何进行超参数调优?7. 什么是模型集成?在物联网机器学习中,为什么要使用模型集成?8. 如何评估物联网机器学习模型的性能?参考答案选择题:1. A2. D3. C4. A、C、D5. D6. A7. A8. A、B、C、D9. B 10. A、C、D11. D 12. A 13. A、C、D 14. B 15. B 16. D 17. D 18. C 19. A 20. A、C、D21. B、C 22. A 23. A、C 24. B 25. B 26. C 27. B、C 28. B 29. D 30. A31. B、C 32. D 33. B 34. A、C、D 35. B 36. D 37. D 38. A 39. A 40. A问答题:1. 什么是物联网?物联网是指通过网络将物理设备、传感器、软件和人类智能连接起来进行信息交换和通信的技术。

机器学习--K近邻(KNN)算法的原理及优缺点

机器学习--K近邻(KNN)算法的原理及优缺点

机器学习--K近邻(KNN)算法的原理及优缺点⼀、KNN算法原理 K近邻法(k-nearst neighbors,KNN)是⼀种很基本的机器学习⽅法。

它的基本思想是:在训练集中数据和标签已知的情况下,输⼊测试数据,将测试数据的特征与训练集中对应的特征进⾏相互⽐较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类。

由于KNN⽅法主要靠周围有限的邻近的样本,⽽不是靠判别类域的⽅法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN⽅法较其他⽅法更为适合。

KNN算法不仅可以⽤于分类,还可以⽤于回归。

通过找出⼀个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。

更有⽤的⽅法是将不同距离的邻居对该样本产⽣的影响给予不同的权值(weight),如权值与距离成反⽐。

KNN算法的描述: (1)计算测试数据与各个训练数据之间的距离; (2)按照距离的递增关系进⾏排序; (3)选取距离最⼩的K个点; (4)确定前K个点所在类别的出现频率 (5)返回前K个点中出现频率最⾼的类别作为测试数据的预测分类。

算法流程: (1)准备数据,对数据进⾏预处理。

(2)选⽤合适的数据结构存储训练数据和测试元组。

(3)设定参数,如k。

(4)维护⼀个⼤⼩为k的的按距离由⼤到⼩的优先级队列,⽤于存储最近邻训练元组。

随机从训练元组中选取k个元组作为初始的最近邻元组,分别计算测试元组到这k个元组的距离,将训练元组标号和距离存⼊优先级队列。

(5)遍历训练元组集,计算当前训练元组与测试。

元组的距离,将所得距离L 与优先级队列中的最⼤距离Lmax。

(6)进⾏⽐较。

若L>=Lmax,则舍弃该元组,遍历下⼀个元组。

若L < Lmax,删除优先级队列中最⼤距离的元组,将当前训练元组存⼊优先级队列。

(7)遍历完毕,计算优先级队列中k 个元组的多数类,并将其作为测试元组的类别。

python 分类变量 聚类方法

python 分类变量 聚类方法

Python分类变量聚类方法在数据分析和机器学习领域,我们经常需要处理各种不同类型的数据。

其中,分类变量是一种常见的数据类型,它包括了诸如性别、颜色、地区等离散的取值。

而对于含有分类变量的数据,我们通常需要采取特定的方法来进行聚类分析,以便更好地理解数据之间的关系和特点。

在Python语言中,有许多强大的库和工具可供我们使用,用于处理包含分类变量的数据,并进行聚类分析。

下面,我将介绍几种常用的Python分类变量聚类方法,并结合具体示例来说明它们的应用。

1. K-Modes算法K-Modes算法是一种基于众数的聚类算法,它专门用于处理包含分类变量的数据。

与K-Means算法不同的是,K-Modes算法不仅考虑数据点的数值距离,还考虑了分类变量之间的距离。

这使得K-Modes算法在处理混合数据时表现更加出色。

举个例子,假设我们有一个包含性别、喜好、地区等分类变量的顾客数据集,我们可以使用K-Modes算法对这些顾客进行聚类,以发现不同群体之间的特征和规律。

2. 二元变量的分组聚类对于只包含两种取值的分类变量,我们可以采用二元变量的分组聚类方法。

这种方法通过计算变量之间的相似度,将相似的变量划分到同一类别中。

在Python中,我们可以使用scikit-learn库中的聚类算法来实现这一过程。

举个例子,假设我们有一个包含红色、绿色和蓝色三种颜色的分类变量数据集,我们可以使用二元变量的分组聚类方法来将这些颜色进行聚类,以便找出彼此相似的颜色组合。

3. 结合数值变量的混合聚类在实际数据分析中,除了分类变量外,数据集通常还包含数值变量。

为了更全面地进行聚类分析,我们可以结合数值变量和分类变量,使用混合聚类方法来探索数据的特征。

举个例子,假设我们有一个包含芳龄、收入和地区等数值变量,以及性别、喜好等分类变量的顾客数据集,我们可以使用混合聚类方法对这些变量进行聚类,以揭示不同群体的特征和规律。

总结回顾在本文中,我们介绍了Python中常用的分类变量聚类方法,并结合具体示例进行了说明。

利用自然语言处理技术进行文本匹配的方法与技巧

利用自然语言处理技术进行文本匹配的方法与技巧

自然语言处理技术(NLP)是一种人工智能技术,旨在使计算机能够理解、解释和处理人类语言。

文本匹配作为NLP领域的一个重要应用,常常被用于信息检索、文档对比、问答系统等领域。

在本文中,我们将讨论利用自然语言处理技术进行文本匹配的方法与技巧。

一、文本预处理文本预处理是文本匹配的第一步,它包括分词、去除停用词、词干化等操作。

分词是将文本切分为单词或短语的过程,常用的分词工具包括jieba、NLTK等。

去除停用词是指去除对文本匹配无意义的词,如“的”、“了”、“是”等。

词干化是将词语变为其词干或词根的过程,如将“running”变为“run”。

通过文本预处理,可以使文本更加规范化、准确化,有利于后续的文本匹配操作。

二、特征提取特征提取是文本匹配的关键步骤,它将文本转化为计算机可处理的特征表示。

常用的特征提取方法包括词袋模型、TF-IDF、Word2Vec等。

词袋模型将文本表示为词频向量,不考虑词语之间的顺序和语义关系。

TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于评估词语在文本和语料库中重要程度的方法,它考虑了词语在文本中的频率和在语料库中的稀有程度。

Word2Vec是一种基于神经网络的词向量表示方法,它能够捕捉词语之间的语义关系。

通过特征提取,可以将文本转化为向量表示,为后续的文本匹配任务提供输入。

三、相似度计算相似度计算是文本匹配的核心内容,它用于衡量两个文本之间的相似程度。

常用的相似度计算方法包括余弦相似度、Jaccard相似度、编辑距离等。

余弦相似度是一种用于计算两个向量之间夹角的相似度指标,它常用于衡量文本语义的相似程度。

Jaccard相似度是一种用于计算两个集合之间相似度的指标,它常用于衡量文本词语的相似程度。

编辑距离是一种用于计算两个字符串之间差异的指标,它常用于衡量文本的拼写相似程度。

通过相似度计算,可以得到文本之间的相似度分数,为文本匹配的结果提供依据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用sklearn做文本分类(特征提取、knnsvm聚类)数据挖掘入门与实战公众号:datadw分为以下几个过程:加载数据集提feature分类Naive BayesKNNSVM聚类20newsgroups官网/~jason/20Newsgroups/上给出了3个数据集,这里我们用最原始的20news-19997.tar.gz/~jason/20Newsgroups/20news-19997.ta r.gz1.加载数据集从20news-19997.tar.gz下载数据集,解压到scikit_learn_data文件夹下,加载数据,详见code注释。

[python]view plaincopy#first extract the 20 news_group dataset to/scikit_learn_datafromsklearn.datasets importfetch_20newsgroups#all categories#newsgroup_train = fetch_20newsgroups(subset='train') #part categoriescategories = ['comp.graphics','comp.os.ms-windows.misc','comp.sys.ibm.pc.hardware','comp.sys.mac.hardware','comp.windows.x'];newsgroup_train = fetch_20newsgroups(subset ='train',categories = categories);可以检验是否load好了:[python]view plaincopy#print category namesfrompprint importpprintpprint(list(newsgroup_train.target_names))结果:['comp.graphics','comp.os.ms-windows.misc','comp.sys.ibm.pc.hardware','comp.sys.mac.hardware','comp.windows.x']2. 提feature:刚才load进来的newsgroup_train就是一篇篇document,我们要从中提取feature,即词频啊神马的,用fit_transform Method 1. HashingVectorizer,规定feature个数[python]view plaincopy#newsgroup_train.data is the original documents, but we need to extract the#feature vectors inorder to model the text data fromsklearn.feature_extraction.text importHashingVectorizervectorizer = HashingVectorizer(stop_words ='english',non_negative = True,n_features = 10000)fea_train = vectorizer.fit_transform(newsgroup_train.data) fea_test = vectorizer.fit_transform(newsgroups_test.data);#return feature vector 'fea_train' [n_samples,n_features] print'Size of fea_train:'+ repr(fea_train.shape)print'Size of fea_train:'+ repr(fea_test.shape)#11314 documents, 130107 vectors for all categories print'The average feature sparsity is {0:.3f}%'.format(fea_train.nnz/float(fea_train.shape[0]*fea_train.shape[1])*1 00);结果:Size of fea_train:(2936, 10000)Size of fea_train:(1955, 10000)The average feature sparsity is 1.002%因为我们只取了10000个词,即10000维feature,稀疏度还不算低。

而实际上用TfidfVectorizer统计可得到上万维的feature,我统计的全部样本是13w多维,就是一个相当稀疏的矩阵了。

****************************************************************** ********************************************************上面代码注释说TF-IDF在train和test上提取的feature维度不同,那么怎么让它们相同呢?有两种方法:Method 2. CountVectorizer+TfidfTransformer让两个CountVectorizer共享vocabulary:[python]view plaincopy#----------------------------------------------------#method 1:CountVectorizer+TfidfTransformerprint'*************************nCountVectorizer+TfidfTransfor mern*************************'fromsklearn.feature_extraction.text importCountVectorizer,TfidfTransformercount_v1= CountVectorizer(stop_words = 'english', max_df = 0.5);counts_train =count_v1.fit_transform(newsgroup_train.data);print"the shape of train is "+repr(counts_train.shape)count_v2 =CountVectorizer(vocabulary=count_v1.vocabulary_); counts_test =count_v2.fit_transform(newsgroups_test.data);print"the shape of test is "+repr(counts_test.shape)tfidftransformer = TfidfTransformer();tfidf_train =tfidftransformer.fit(counts_train).transform(counts_train); tfidf_test =tfidftransformer.fit(counts_test).transform(counts_test);结果:*************************CountVectorizer+TfidfTransformer*************************the shape of train is (2936, 66433)the shape of test is (1955, 66433)Method 3. TfidfVectorizer让两个TfidfVectorizer共享vocabulary:[python]view plaincopy#method 2:TfidfVectorizerprint'*************************nTfidfVectorizern**************** *********'fromsklearn.feature_extraction.text importTfidfVectorizer tv = TfidfVectorizer(sublinear_tf = True,max_df = 0.5,stop_words = 'english');tfidf_train_2 = tv.fit_transform(newsgroup_train.data);tv2 = TfidfVectorizer(vocabulary = tv.vocabulary_);tfidf_test_2 = tv2.fit_transform(newsgroups_test.data); print"the shape of train is "+repr(tfidf_train_2.shape) print"the shape of test is "+repr(tfidf_test_2.shape) analyze = tv.build_analyzer()tv.get_feature_names()#statistical features/terms结果:*************************TfidfVectorizer*************************the shape of train is (2936, 66433)the shape of test is (1955, 66433)此外,还有sklearn里封装好的抓feature函数,fetch_20newsgroups_vectorizedMethod 4. fetch_20newsgroups_vectorized但是这种方法不能挑出几个类的feature,只能全部20个类的feature全部弄出来:[python]view plaincopyprint'*************************nfetch_20newsgroups_vectoriz edn*************************'fromsklearn.datasetsimportfetch_20newsgroups_vectorizedtfidf_train_3 = fetch_20newsgroups_vectorized(subset = 'train');tfidf_test_3 = fetch_20newsgroups_vectorized(subset = 'test');print"the shape of train is "+repr(tfidf_train_3.data.shape) print"the shape of test is "+repr(tfidf_test_3.data.shape)结果:*************************fetch_20newsgroups_vectorized*************************the shape of train is (11314, 130107)the shape of test is (7532, 130107)3. 分类3.1 Multinomial Naive Bayes Classifier[python]view plaincopy############################################## #########Multinomial Naive Bayes Classifierprint'*************************nNaiveBayesn*************************'fromsklearn.naive_bayes importMultinomialNB fromsklearn importmetricsnewsgroups_test = fetch_20newsgroups(subset = 'test', categories = categories);fea_test = vectorizer.fit_transform(newsgroups_test.data); #create the Multinomial Naive Bayesian Classifierclf = MultinomialNB(alpha = 0.01)clf.fit(fea_train,newsgroup_train.target);pred = clf.predict(fea_test);calculate_result(newsgroups_test.target,pred);#notice here we can see that f1_score is not equal to2*precision*recall/(precision+recall)#because the m_precision and m_recall we get is averaged, however, metrics.f1_score() calculates#weithed average, i.e., takes into the number of each class into consideration.注意我最后的3行注释,为什么f1≠2*(准确率*召回率)/(准确率+召回率)其中,函数calculate_result计算f1:[python]view plaincopydefcalculate_result(actual,pred):m_precision = metrics.precision_score(actual,pred);m_recall = metrics.recall_score(actual,pred);print'predict info:'print'precision:{0:.3f}'.format(m_precision)print'recall:{0:0.3f}'.format(m_recall);print'f1-score:{0:.3f}'.format(metrics.f1_score(actual,pred));3.2 KNN:[python]view plaincopy############################################## #########KNN Classifierfromsklearn.neighbors importKNeighborsClassifierprint'*************************nKNNn*************************'knnclf = KNeighborsClassifier()#default with k=5 knnclf.fit(fea_train,newsgroup_train.target)pred = knnclf.predict(fea_test);calculate_result(newsgroups_test.target,pred);3.3 SVM:[cpp]view plaincopy############################################## #########SVM Classifierfrom sklearn.svm import SVCprint '*************************nSVMn*************************' svclf = SVC(kernel = 'linear')#defaultwith 'rbf'svclf.fit(fea_train,newsgroup_train.target)pred = svclf.predict(fea_test);calculate_result(newsgroups_test.target,pred);结果:*************************Naive Bayes*************************predict info:precision:0.764recall:0.759f1-score:0.760*************************KNN*************************predict info:precision:0.642recall:0.635f1-score:0.636*************************SVM*************************predict info:precision:0.777recall:0.774f1-score:0.7744. 聚类[cpp]view plaincopy#######################################################KMeans Clusterfrom sklearn.cluster import KMeansprint'*************************nKMeansn*************************' pred = KMeans(n_clusters=5)pred.fit(fea_test)calculate_result(newsgroups_test.target,bels_);结果:*************************KMeans*************************predict info:precision:0.264recall:0.226f1-score:0.213本文全部代码回复“sk”获取。

相关文档
最新文档