让我们说人们通过电子邮件向我发送他们遇到的有关程序的问题。我想教机器根据每封电子邮件中使用的单词将这些电子邮件分类为“问题类型”类。
我创建了两个CSV文件,分别包含:
Here is an image showing the two CSV files
我正在尝试将这些数据提供给Python 3中的Scikit-Learn的SVC算法。但据我所知,带有电子邮件内容的CSV文件无法直接传递到SVC;它似乎只接受花车。
我尝试运行以下代码:
import pandas as pd
import os
from sklearn import svm
from pandas import DataFrame
data_file = "data.csv"
data_df = pd.read_csv(data_file, encoding='ISO-8859-1')
classes_file = "classes.csv"
classes_df = pd.read_csv(classes_file, encoding='ISO-8859-1')
X = data_df.values[:-1] #training data
y = classes_df.values[:-1] #training labels
#The SVM classifier requires the specific variables X and y
#an array X of size [n_samples, n_features] holding the training samples,
#and an array y of class labels (strings or integers), size [n_samples]
clf = svm.SVC(gamma=0.001, C=100)
clf.fit(X, y)
当我运行它时,我在最后一行收到“ValueError”,声明“无法将字符串转换为浮动”,然后是“data.csv”文件中第一封电子邮件的内容。我是否需要将这些电子邮件内容转换为浮点数以便将它们提供给SVC算法?如果是这样,我将如何做到这一点?
我一直在http://scikit-learn.org/stable/datasets/index.html#external-datasets阅读,并说明
存储为字符串的分类(或名义)特征(在pandas DataFrames中很常见)需要转换为整数,并且当编码为单热变量时,整数分类变量可能被最佳利用
然后引导我阅读他们关于预处理数据的文档,但是我担心接下来要去哪里会有点迷失。我不完全确定我需要对我的电子邮件内容做什么,才能使用SVC算法。
我非常感谢任何人可以提供的有关如何解决此问题的见解。
答案 0 :(得分:0)
是的,您需要对分类功能进行编码,然后将其用于SVC。
您可以DictVectorizer使用data_df
功能,然后classes_df
使用import pandas as pd
from sklearn.feature_extraction import DictVectorizer
from sklearn import preprocessing
from sklearn import svm
data_file = "data.csv"
data_df = pd.read_csv(data_file, encoding='ISO-8859-1')
classes_file = "classes.csv"
classes_df = pd.read_csv(classes_file, encoding='ISO-8859-1')
# label encoding
lab_enc = preprocessing.LabelEncoder()
labels_new = lab_enc.fit_transform(classes_df)
# vectorize training data
train_as_dicts = [dict(r.iteritems()) for _, r in data_df.iterrows()]
train_new = DictVectorizer(sparse=False).fit_transform(train_as_dicts)
clf = svm.SVC(gamma=0.001, C=100)
clf.fit(train_new, labels_new)
。
这是我使用的示例数据:LabelEncoder
使用完全相同的数据,以下工作正常:
len(data_df['Description'][0])
982
这很好用。
希望这有帮助
修改强>
我在互联网上使用以下文字作为 data.csv中的一项功能。
以下是Description列的第一个元素。
但在第一次报告发布后不久,最初的陈述就是误导性的。据“泰晤士报”报道,小特朗普接受了这次会议,希望它会产生有关希拉里克林顿的破坏性信息,小特朗普说它没有。在纽约时报获得了一个熟人的电子邮件链后,Rob Goldstone向特朗普提供了一次会议,在那里他可以获得信息,作为俄罗斯政府努力帮助他父亲的活动的一部分,小特朗普在网上发布了这些电子邮件。但在第一份报告发布后不久,最初的声明就被误导了。据“泰晤士报”报道,小特朗普接受了这次会议,希望它会产生有关希拉里克林顿的破坏性信息,小特朗普说它没有。在纽约时报获得了一个熟人的电子邮件链后,Rob Goldstone向特朗普提供了一次会议,在那里他可以获得信息,作为俄罗斯政府努力帮助他父亲的活动的一部分,小特朗普在网上发布了这些电子邮件。
长度为:
sklearn.__version__
'0.18.2'
pandas.__version__
u'0.20.3'
代码再次正常运行。
编辑2
我正在使用:
-v