You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于单字符串列的变量分类方法咨询(含SVM疑问及示例数据)

基于字符串列用SVM实现分类的实操指南

针对你的需求——用产品名称(names列)预测类别(category列),我来一步步带你实现,全是可直接跑的代码和易懂的解释~

第一步:准备环境与加载数据

首先确保你安装了必要的库:pandas用于数据处理,scikit-learn用于特征提取和模型构建。如果没装,直接用pip install pandas scikit-learn搞定。

先把你的示例数据加载成DataFrame:

import pandas as pd

# 你的示例数据
data = [
    ["321 Friall Táborské krokety 750g", "美式土豆与薯条"],
    ["800 McCain Fri'Style 600g", "美式土豆与薯条"],
    ["803 McCain Smiles 450g", "美式土豆与薯条"],
    ["935 Nowaco Americké brambory 750g", "美式土豆与薯条"],
    ["937 Nowaco Krokety 300g", "美式土豆与薯条"],
    ["1375 Tesco Kořeněné bramborové dílky 750g", "美式土豆与薯条"],
    ["939 Nowaco Pstruh lososovitý filet", "包装鱼类"],
    ["1157 Rybářství Chlumec Nad Cidlinou Kapr půlka s kůží čerstvá chlazená", "包装鱼类"],
    ["1158 Rybářství Chlumec Nad Cidlinou Kapr řízky s kůží čerstvě chlazené", "包装鱼类"],
    ["1159 Rybářství Chlumec Nad Cidlinou Pstruh kuchaný s hlavou čerstvý chlazený", "包装鱼类"],
    ["322 Gastro Camping salát 140g", "包装沙拉"],
    ["323 Gastro Ďábelský salát 140g", "包装沙拉"],
    ["324 Gastro Feferonový salát 140g", "包装沙拉"],
    ["325 Gastro Hermelínový salát 140g", "包装沙拉"],
    ["326 Gastro Holandský salát 140g", "包装沙拉"],
    ["327 Gastro Loupežnický salát 140g", "包装沙拉"]
]

df = pd.DataFrame(data, columns=["names", "category"])

第二步:文本特征提取——把字符串转成数值向量

SVM是数值模型,没法直接处理文本,所以咱们用TF-IDF把产品名称转换成数值特征。TF-IDF能帮我们衡量每个词汇在文本中的重要性,比如“salát”(沙拉)在沙拉类名称里出现频繁,权重就高,很适合分类。

from sklearn.feature_extraction.text import TfidfVectorizer

# 初始化TF-IDF转换器,这里可以根据需求调整参数,比如去掉停用词(如果你的语言有现成停用词库的话)
tfidf = TfidfVectorizer(stop_words=None)  # 因为你的数据是捷克语+中文,暂时不用停用词,后续可以优化
X = tfidf.fit_transform(df["names"])  # 把names列转成TF-IDF矩阵
y = df["category"]  # 目标类别

第三步:拆分训练集与测试集

为了评估模型效果,咱们把数据分成训练集(用来训练模型)和测试集(用来验证模型):

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

第四步:构建并训练SVM模型

文本分类里,线性核SVM通常效果不错,而且速度快,适合你的场景。咱们用scikit-learn的SVC类来实现:

from sklearn.svm import SVC

# 初始化线性核SVM分类器
svm_classifier = SVC(kernel='linear')
# 用训练集训练模型
svm_classifier.fit(X_train, y_train)

第五步:模型评估与预测

训练完之后,咱们看看模型在测试集上的表现,比如准确率,也可以用混淆矩阵看分类细节:

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 用测试集预测
y_pred = svm_classifier.predict(X_test)

# 输出准确率
print(f"模型准确率:{accuracy_score(y_test, y_pred):.2f}")

# 输出分类报告(包含精确率、召回率、F1值)
print("\n分类报告:")
print(classification_report(y_test, y_pred))

# 输出混淆矩阵
print("\n混淆矩阵:")
print(confusion_matrix(y_test, y_pred))

第六步:用模型预测新数据

如果有新的产品名称,咱们可以这样预测它的类别:

# 示例新数据
new_names = ["Tesco Krokety 500g", "Greek Salát 200g", "Rybářství Kapr filet"]
# 转成TF-IDF特征(注意用transform,不是fit_transform,避免数据泄露)
new_X = tfidf.transform(new_names)
# 预测类别
predictions = svm_classifier.predict(new_X)

for name, pred in zip(new_names, predictions):
    print(f"产品名称:{name} → 预测类别:{pred}")

一些优化建议

  • 停用词处理:如果你的数据里有很多无意义的词汇(比如数字、单位“g”),可以自定义停用词列表,在TfidfVectorizer里设置stop_words参数,过滤掉这些干扰项。
  • 核函数选择:如果线性核效果不够好,可以试试RBF核(kernel='rbf'),但要注意调参(比如C和gamma)。
  • 数据增强:如果你的数据集很小,可以考虑同义词替换、拼写修正等方式扩充数据,提升模型泛化能力。

内容的提问来源于stack exchange,提问作者Patrik Bachan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:36:49