如何将excel电子表格中的数据转换为适合的训练scikit-learn模型的表示

时间:2014-01-15 09:44:18

标签: python classification svm scikit-learn

我有一个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在线的教程,但他们似乎都使用不同的方法来创建数据集以供使用。如果有人能给我提供如何进行的提示,我将不胜感激,因为我现在被困住了。我正在训练分类器,将电子邮件分类。提前谢谢!

1 个答案:

答案 0 :(得分:1)

将输入数据包装为2D numpy数组:每个样本/实例/观察一行。数组的列应存储样本的数字描述符(特征)。

您需要将输出/目标类存储为另一个整数的numpy数组。应为每个目标类分配一个整数(例如0表示“ham”,1表示“垃圾邮件”)。

输出/目标类数组的输入数据应与输入数据中的行数一样多(每个样本一个标签)。

如果您不知道如何将Python列表转换为numpy数组,请阅读numpy的文档。你可以从这里开始:

要获得SVM良好的预测准确性,还需要确保您的功能有意义(例如,不要使用字符串或整数表示来编码分类输入功能,而是使用单热编码功能扩展)并将您的数据标准化为中心并扩展到单位差异。特别要看看:

编辑:我没有看到你最后的陈述:如果您的输入数据是原始电子邮件文本,则必须提取功能(统计汇总电子邮件内容的数字描述符)。在这种情况下,您将需要提取文本特征: