要使用 scikit-learn
库中的 KNeighborsClassifier
方法建立一个垃圾短信分类模型,你可以参照以下步骤:
CountVectorizer
或 TfidfVectorizer
。KNeighborsClassifier
的实例。这里是一个示例代码,展示如何实现这些步骤:
from sklearn.datasets import load_iris
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score
# 假设 TXT 文件路径
file_path = 'spam_dataset.txt'
# 读取数据集
with open(file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
# 假设每行数据包含标签和文本,用某种分隔符分开,示例中用逗号
texts = [line.strip().split(',')[1] for line in lines]
labels = [line.strip().split(',')[0] for line in lines]
# 将标签转换为数值型,例如:'ham' 对应 0,'spam' 对应 1
labels = [1 if label == 'spam' else 0 for label in labels]
# 创建 CountVectorizer 实例以将文本转换为数值特征
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)
# 创建 KNeighborsClassifier 实例
knn_classifier = KNeighborsClassifier(n_neighbors=3) # n_neighbors 是一个参数
# 训练模型
knn_classifier.fit(X_train, y_train)
# 使用模型进行预测
y_pred = knn_classifier.predict(X_test)
# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")
# 打印分类报告
print(classification_report(y_test, y_pred))
请确保根据你的数据集格式调整上面的代码中的文件路径和分隔符。此外,你可以通过选择不同的 n_neighbors
参数来优化 KNN 分类器的性能,或者尝试其他特征提取方法,如 TfidfVectorizer
,来改善模型效果。
在实际应用中,你可能还需要对分类器的参数进行调整(比如 weights
、metric
等),以及进行适当的数据清洗和预处理,以提高模型的性能。