import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
import joblib
data = pd.read_csv("IMDB Dataset.csv", delimiter=",", names=['review', 'sentiment'], skiprows=1)
X = data["review"].values
y = data["sentiment"].apply(lambda x: 0 if x == "positive" else 1).values #
tfidf_vectorizer = TfidfVectorizer()
X = tfidf_vectorizer.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
svm_model = SVC(kernel='linear')
svm_model.fit(X_train, y_train)
joblib.dump(svm_model, 'svm_model.pkl')
joblib.dump(tfidf_vectorizer, 'tfidf_vectorizer.pkl')
y_pred = svm_model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print("准确率:", accuracy)
print("精确率:", precision)
print("召回率:", recall)
print("F1值:", f1)
这段代码实现了一个简单的文本分类任务,具体步骤如下:
这段代码的主要目的是训练一个支持向量机模型来对文本评论进行情感分类,并使用 TF-IDF 向量化器将文本数据转换为特征向量,以便模型进行学习。最后,评估模型在测试集上的性能。
TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用于文本特征提取的技术。它将文本数据转换为向量形式,以便机器学习模型能够理解和处理。在这个项目中,使用TF-IDF特征向量的原因如下:
综上所述,TF-IDF特征向量在这个项目中被使用,是为了将文本数据转换为数值特征,提取文本中的重要信息,并为机器学习模型提供有意义的输入,以便进行情感分类的训练和预测。
TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于文本特征提取的技术,它通过考虑单词在文档中的频率以及在整个语料库中的出现频率来表示文本数据。其运行原理如下:
通过上述步骤,TF-IDF 可以将文本数据转换为数值特征向量,同时考虑了词在文档中的频率和在整个语料库中的重要性,从而提取了文本的关键信息,为后续的机器学习任务提供了有意义的输入。
在文本分类任务中,我们需要将文本数据转换为可以被机器学习模型处理的数值形式。TF-IDF 可以实现这一目的。下面是一个例子来说明特征向量表示:
假设我们有一个包含两个文档的简单语料库:
首先,我们需要构建一个词汇表,该词汇表包含语料库中所有文档中出现的唯一单词。在这个例子中,我们的词汇表可能包含以下单词:["this", "is", "a", "document", "about", "machine", "learning", "subset", "of", "artificial", "intelligence"]。
接下来,我们使用 TF-IDF 来计算每个单词在每个文档中的 TF-IDF 值。例如,假设我们计算了每个单词在每个文档中的 TF-IDF 如下所示:
单词 |
文档1的 TF-IDF 值 |
文档2的 TF-IDF 值 |
this |
0.1 |
0 |
is |
0.1 |
0 |
a |
0.1 |
0 |
document |
0.1 |
0 |
about |
0.1 |
0 |
machine |
0.1 |
0.15 |
learning |
0.1 |
0.15 |
subset |
0 |
0.1 |
of |
0 |
0.1 |
artificial |
0 |
0.1 |
intelligence |
0 |
0.1 |
然后,我们将每个文档表示为一个向量,向量的维度等于词汇表中的单词数量。每个维度上的值对应于该单词在文档中的 TF-IDF 值。例如,文档1可以表示为以下向量:
[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0,0,0,0][0.1,0.1,0.1,0.1,0.1,0.1,0.1,0,0,0,0]
文档2可以表示为以下向量:
[0,0,0,0,0,0.15,0.15,0.1,0.1,0.1,0.1][0,0,0,0,0,0.15,0.15,0.1,0.1,0.1,0.1]
这样,每个文档都被表示为一个稠密的数值向量,其中每个维度对应于词汇表中的一个单词,并且每个维度上的值是该单词在文档中的 TF-IDF 值。这些向量可以作为机器学习模型的输入,用于训练和预测。
在这段代码中,SVC 是 支持向量分类器(Support Vector Classification) 的缩写。让我解释一下它的作用和原理:
作用:
SVC 是一种机器学习算法,用于二元分类问题。
它基于支持向量机(SVM)的思想,通过寻找一个最优超平面来将不同类别的样本分开。
在训练阶段,SVC 将训练数据映射到一个叫做决策空间的多维空间,并创建一个叫做决策边界的分离面,将决策空间分为两个区域。
原理:
SVC 的目标是匹配您提供的数据,返回一个“最佳匹配”的超平面,用于划分或分类您的数据。
决策边界可以是平面(3D)或直线(2D)。
正则化参数 C 控制着模型的复杂度,较小的 C 值表示计算间隔时考虑所有数据点,而较大的 C 值表示只考虑分界线附近的数据点。
支持向量是决策边界上的数据点,它们对模型的构建和预测起到关键作用。
总之,SVC 是一种强大的分类器,适用于许多不同类型的数据集。它的原理基于数学和几何概念,通过优化超平面来实现数据的分类。