我有一个excel文件的输入数据,我使用nltk以下面的方式处理:
rb = open_workbook('subjectcat.xlsx')#C:/Users/5460/Desktop/
wb = copy(rb) #making a copy
sheet = rb.sheet_by_index(0)
data = ()
for row_index in range(1,500): #train using 500
temp,add = (),()
subject,cat = 0,0 #trial
for col_index in range(1,3):
if col_index==1:
#print col_index
subject = sheet.cell(row_index,col_index).value
#print subject
#print cellname(row_index,col_index)
subject = "'" + subject
#temp +=(subject,)
#print temp
elif col_index==2:
#print col_index
cat = sheet.cell(row_index,col_index).value
#print cat
#print cellname(row_index,col_index)
cat = "'" + cat + "'"
add = add + (subject,cat)
#print (add)
data = data + (add,)
print 'done'
training_data = list(data)
training_data = training_data[1:][::2] #removing the even items
我现在必须继续使用scikit-learn来训练分类器。我已经阅读了许多关于svm在线的教程,但他们似乎都使用不同的方法来创建数据集以供使用。如果有人能给我提供如何进行的提示,我将不胜感激,因为我现在被困住了。我正在训练分类器,将电子邮件分类。提前谢谢!
答案 0 :(得分:1)
将输入数据包装为2D numpy数组:每个样本/实例/观察一行。数组的列应存储样本的数字描述符(特征)。
您需要将输出/目标类存储为另一个整数的numpy数组。应为每个目标类分配一个整数(例如0表示“ham”,1表示“垃圾邮件”)。
输出/目标类数组的输入数据应与输入数据中的行数一样多(每个样本一个标签)。
如果您不知道如何将Python列表转换为numpy数组,请阅读numpy的文档。你可以从这里开始:
要获得SVM良好的预测准确性,还需要确保您的功能有意义(例如,不要使用字符串或整数表示来编码分类输入功能,而是使用单热编码功能扩展)并将您的数据标准化为中心并扩展到单位差异。特别要看看:
编辑:我没有看到你最后的陈述:如果您的输入数据是原始电子邮件文本,则必须提取功能(统计汇总电子邮件内容的数字描述符)。在这种情况下,您将需要提取文本特征: