import numpy as np
from sklearn import svm
from sklearn import model_selection
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
# 读取数据
data = pd.read_csv('评论数据.csv', encoding='utf-8')
data = data[['pl', 'label']]
# 处理评论文本中可能存在的缺失值或无效字符
data = data.dropna() # 去除缺失值
data = data[data['pl'].apply(lambda x: isinstance(x, str))] # 保留字符串类型的评论文本
# 将评论文本列和标签列分开
x = data['pl']
y = data['label']
# 创建 TF-IDF 特征提取器
tfidf_vectorizer = TfidfVectorizer()
# 将评论文本转换为 TF-IDF 特征向量
x_tfidf = tfidf_vectorizer.fit_transform(x)
# 随机分配训练数据和测试数据
data_train, data_test, tag_train, tag_test = model_selection.train_test_split(x_tfidf, y, random_state=1, test_size=0.3)
# 定义SVM(支持向量机)模型
clf = svm.SVC(C=0.5, kernel='linear', decision_function_shape='ovr')
# 训练SVM 模型
clf.fit(data_train, tag_train)
# 打印训练集和测试集的准确率
'''print('training prediction: %.3f' % clf.score(data_train, tag_train))
print('test data prediction: %.3f' % clf.score(data_test, tag_test))'''
def show_accuracy(a, b, tip):
acc = a.ravel() == b.ravel()
print('%s Accuracy:%.3f' % (tip, np.mean(acc)))
def print_accuracy(clf, data_train, tag_train, data_test, tag_test):
# 分别打印训练集和测试集的准确率
# score(x_train, y_train):表示输出x_train, y_train 在模型上的准确率
print('training prediction:%.3f' % (clf.score(data_train, tag_train)))
print('test data prediction:%.3f' % (clf.score(data_test, tag_test)))
# 原始结果与预测结果进行对比
# predict() 表示对x_train 样本进行预测,返回样本类别
show_accuracy(clf.predict(data_train), tag_train, 'training data')
show_accuracy(clf.predict(data_test), tag_test, 'testing data')
# 计算决策函数的值,表示x到各分割平面的距离
print('decision_function:\n', clf.decision_function(data_train))
print_accuracy(clf, data_train, tag_train, data_test, tag_test)
可以检查下过滤后的数据量,从贴的图看17条里面就3条有效数据。。。
【以下回答由 GPT 生成】
首先,0.5的准确率可能表示模型存在一些问题或者数据特征不适合模型。下面我会为您提供一些优化代码的建议来提高模型的准确率。
数据清洗和预处理:从问题描述来看,你已经去除了缺失值和非字符串评论文本,这是一个好的开始。但还可以进行其他的数据清洗和预处理的步骤来进一步提高模型的准确率,如去除停用词、词干提取、去除特殊字符等。建议使用NLTK库来完成这些任务。
调整模型参数:
调整正则化参数C:通过调整SVM模型的正则化参数C来控制模型的容错性。一般来说,较小的C值会导致模型更容易容忍错误分类,较大的C值会使模型更强调训练集的准确性。你可以尝试不同的C值,看看是否有所改善。
特征工程:
增加特征:考虑添加其他与目标变量相关的特征,如文本长度、文本中包含的特定词汇的数量、情感分析等。这些额外的特征可能会提供更多的信息以改善模型性能。
模型评估和调优:
cross_val_score
函数来评估模型在不同的训练集和测试集上的准确率,并选择最佳的参数组合。综上所述,这些是优化你的代码以提高模型准确率的一些建议。请注意,在进行这些优化步骤之前,务必对数据进行进一步的分析和理解,以便选择正确的优化方法。此外,请记得评估每个步骤的改进效果,以便确定做出相应的调整和改进。
【相关推荐】