sklearn文本分类
时间: 2024-12-31 15:28:47 浏览: 7
### 如何使用 scikit-learn 进行文本分类
#### 准备工作
为了进行文本分类,首先需要安装必要的库。如果尚未安装 `scikit-learn` 和其他依赖项,则可以通过 pip 安装这些包。
```bash
pip install numpy pandas scikit-learn
```
#### 导入所需模块
在开始之前,先导入用于处理数据集以及构建和支持向量机模型所需的 Python 库[^2]:
```python
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_score
import pandas as pd
```
#### 加载并预览数据集
假设有一个 CSV 文件作为输入源,该文件包含了两列——一列表示文档的内容(即待分析的文本),另一列表示类别标签(例如垃圾邮件/非垃圾邮件)。可以利用 Pandas 来加载此数据集,并查看前几条记录以了解其结构[^1]。
```python
data = pd.read_csv('path/to/dataset.csv')
print(data.head())
```
#### 数据准备
接下来,将整个数据集划分为训练集和测试集两个部分;通常情况下会按照一定比例分配这两者之间的样本数量,比如80%的数据用来训练而剩下的20%则留作验证之用。这里采用的是75%-25%的比例划分方法。
```python
X_train, X_test, y_train, y_test = train_test_split(
data['text'], # 文本特征
data['label'], # 类别标签
test_size=0.25,
random_state=42
)
```
#### 特征提取
对于文本数据来说,在应用机器学习算法之前还需要将其转换成数值型特征向量的形式。在此过程中,通过调用 `CountVectorizer()` 创建了一个基于词频统计方式来表征每篇文档的方法实例对象,并以此为基础完成对原始语料库中所有单词频率计数的任务。最终得到的结果是一个稀疏矩阵形式的表现形式。
```python
vectorizer = CountVectorizer()
X_train_counts = vectorizer.fit_transform(X_train.values.astype('U'))
X_test_counts = vectorizer.transform(X_test.values.astype('U'))
```
#### 训练 SVM 模型
创建一个线性核的支持向量分类器 (Support Vector Classifier),并将上述经过变换后的训练样例传递给它来进行参数估计过程。这一步骤完成后即可获得已经拟合好的预测函数。
```python
clf = SVC(kernel='linear', C=1).fit(X_train_counts, y_train)
predicted = clf.predict(X_test_counts)
```
#### 结果评估
最后,计算所建立起来的分类系统的性能指标,如准确率、召回率等,以便更好地理解当前方案的有效性和局限所在。此外还可以打印出详细的分类报告供进一步审查。
```python
print(f'Accuracy: {accuracy_score(y_test, predicted)}')
print(classification_report(y_test, predicted))
```
阅读全文