当前位置:   article > 正文

支持向量机(SVM)进行文本分类的Python简单示例实现_支持向量机文本分类

支持向量机文本分类

支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,主要用于分类和回归问题。它的基本思想是将数据映射到高维空间中,使得数据在该空间中线性可分,然后在该空间中寻找最优的超平面,将不同类别的数据分开。

SVM的优点在于可以处理高维数据,具有较好的泛化能力和鲁棒性。同时,SVM还可以使用核函数将数据映射到更高维的空间中,从而处理非线性问题。

SVM的核心是支持向量,即距离超平面最近的数据点。在训练过程中,SVM会寻找最大间隔超平面,即距离支持向量最远的超平面。这样可以使得分类器的泛化能力更好,对新的数据具有更好的预测能力。

SVM的训练过程可以使用优化算法来实现,例如序列最小优化(Sequential Minimal Optimization,SMO)算法。在实际应用中,SVM还可以使用软间隔和核函数等技术来处理噪声和非线性问题。

  1. from sklearn.feature_extraction.text import CountVectorizer
  2. import numpy as np
  3. from sklearn import svm
  4. X = np.array([
  5. "这个电影太好看了",
  6. "这个电影真是太差了",
  7. "我喜欢这个电视剧",
  8. "这个电视剧太无聊了"
  9. ])
  10. y = np.array([1, 0, 1, 0]) # 1代表积极,0代表消极
  11. vectorizer = CountVectorizer()
  12. X = vectorizer.fit_transform(X)
  13. clf = svm.SVC() #创建一个SVC对象,并使用fit方法拟合数据
  14. clf.fit(X, y)
  15. new_text = np.array(["这个电影非常棒"]) #假设有一个新的文本数据new_text
  16. new_text = vectorizer.transform(new_text)
  17. prediction = clf.predict(new_text)
  18. print(prediction) #prediction是一个数组,包含了预测结果

如果你的数据来源于一个CSV文件中的很多条文本,你可以使用Python中的pandas库来读取CSV文件 。CSV中数据格式示例如下,包含两个字段:textlabel。第一行是字段名,后面的行是数据记录。每一行的字段值使用逗号进行分隔:

  1. text,label
  2. 这个电影太好看了,1
  3. 这个电影真是太差了,0
  4. 我喜欢这个电视剧,1
  5. 这个电视剧太无聊了,0
  1. from sklearn.feature_extraction.text import CountVectorizer
  2. import numpy as np
  3. from sklearn import svm
  4. # 读取CSV文件
  5. df = pd.read_csv('data.csv', encoding='utf-8')
  6. # 获取文本数据和标签
  7. X = df['text'].values
  8. y = df['label'].values
  9. vectorizer = CountVectorizer()
  10. X = vectorizer.fit_transform(X)
  11. clf = svm.SVC() #创建一个SVC对象,并使用fit方法拟合数据
  12. clf.fit(X, y)
  13. new_text = np.array(["这个电影非常棒"]) #假设有一个新的文本数据new_text
  14. new_text = vectorizer.transform(new_text)
  15. prediction = clf.predict(new_text)
  16. print(prediction) #prediction是一个数组,包含了预测结果

如果你的数据来源于一个txt文本中的很多句子,句子和标签之间用逗号分隔,示例如下:

  1. 这个电影太好看了,1
  2. 这个电影真是太差了,0
  3. 我喜欢这个电视剧,1
  4. 这个电视剧太无聊了,0
  1. from sklearn.feature_extraction.text import CountVectorizer
  2. import numpy as np
  3. from sklearn import svm
  4. # 读取txt文件
  5. with open('data.txt', 'r', encoding='utf-8') as file:
  6. lines = file.readlines()
  7. sentences = []
  8. labels = []
  9. # 分割句子和标签
  10. for line in lines:
  11. line = line.strip() # 去除换行符和空格
  12. sentence, label = line.split(',') # 使用逗号分隔句子和标签
  13. sentences.append(sentence)
  14. labels.append(label)
  15. y=np.array(labels)
  16. vectorizer = CountVectorizer()
  17. X = vectorizer.fit_transform(sentences)
  18. clf = svm.SVC() #创建一个SVC对象,并使用fit方法拟合数据
  19. clf.fit(X, y)
  20. new_text = np.array(["这个电影非常棒"]) #假设有一个新的文本数据new_text
  21. new_text = vectorizer.transform(new_text)
  22. prediction = clf.predict(new_text)
  23. print(prediction) #prediction是一个数组,包含了预测结果

示例中使用了简单的词袋模型,将每个文本表示为一个向量,其中每个维度表示一个词的出现次数,使用CountVectorizer实现了这一步骤。

程序输出结果如下:

[1]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/534423
推荐阅读
相关标签
  

闽ICP备14008679号