在包含多个值的功能上,使用Sklearn构建SVM模型的最佳方法是什么?



我正在将多个CSV文件读为数据框架。每个文件都包含几列和行数据,我试图从中构建一个模型,将每个文件分类为目标标签'1'或目标标签'0'。我已经能够按"文件"对列进行分组,并且每个功能都包含多个值。我正在尝试将数据正确分为培训和测试集,因此可以构建SVM模型以预测正确的标签。

用给定的数据结构构建模型的好方法是什么?尝试构建模型时,使用哪些数据帧更有效。

我尝试通过"文件"索引,其功能(%cpu(和目标值。

    os.chdir("E:Research Machine LearningComputerDebugging\bugfree")
    extension = 'csv'
    all_files2 = [i for i in glob.glob('*.{}'.format(extension))]
    df2 = pd.DataFrame(columns=["%CPU","PID",'TimeStamp',])
    fields=["%CPU","PID",'TimeStamp']
    files2 = []
    for f in all_files2:
        bugfree = pd.read_csv(f, header=0,usecols=fields,nrows=125)
        bugfree.sort_values(by=['TimeStamp','PID'], inplace=True)
        for i in  range(bugfree.shape[0]):
            files2.append(f)
        df2 = df2.append(bugfree)
    df2['target']=0
    df2['file'] = files2
    df2 = df2.drop(["PID","TimeStamp"], axis=1)
    df2 = df2.set_index(['file','target']).stack()

第一个数据框:

df3
                                                                %CPU  target
finalprod1.csv     [20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0, 50.0, 50...       1
finalprod10.csv    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...       1
finalprod100.csv   [33.3, 33.3, 0.0, 0.0, 33.3, 0.0, 16.7, 16.7, ...       1
finalprod11.csv    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...       1
finalprod12.csv    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 25.0, 25.0, 25....       1
finalprod13.csv    [0.0, 0.0, 33.3, 0.0, 0.0, 0.0, 25.0, 50.0, 0....       1
finalprod14.csv    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...       1
...
finalprodBF72.csv  [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, ...       0
finalprodBF73.csv  [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, ...       0
finalprodBF74.csv  [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, ...       0
finalprodBF75.csv  [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, ...       0
finalprodBF76.csv  [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, ...       0
finalprodBF77.csv  [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, ...       0
finalprodBF78.csv  [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, ...       0
finalprodBF79.csv  [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, ...       0

我还以此结构构建了数据框架作为替代方案:

    os.chdir("E:Research Machine LearningComputerDebugging\bugfree")
    extension = 'csv'
    all_files2 = [i for i in glob.glob('*.{}'.format(extension))]
    df2 = pd.DataFrame(columns=["%CPU","PID",'TimeStamp',])
    fields=["%CPU","PID",'TimeStamp']
    files2 = []
    for f in all_files2:
        bugfree = pd.read_csv(f, header=0,usecols=fields,nrows=125)
        bugfree.sort_values(by=['TimeStamp','PID'], inplace=True)
        for i in  range(bugfree.shape[0]):
            files2.append(f)
        df2 = df2.append(bugfree)
    df2['target']=0
    df2['file'] = files2
    df2 = df2.drop(["PID","TimeStamp"], axis=1)
    df2 = df2.set_index(['file','target']).stack()

第二个数据框:

file              target           
finalprod1.csv    1      %CPU  20.0
                         %CPU   0.0
                         %CPU   0.0
                         %CPU   0.0
                         %CPU   0.0
                         %CPU   0.0
                            ...
finalprodBF99.csv 0      %CPU  25.0
                         %CPU  33.3
                         %CPU   0.0
                         %CPU  33.3
                         %CPU  33.3
                         %CPU  66.7
                            ...

我尝试使用第一个数据框架构建模型:

    X = df3['%CPU']
    Y = df3['target']
    X_train , X_test , Y_train , Y_test = train_test_split(X, Y, 
                                                        #Split the Training and Test sets by 50% split                        
                                                        train_size=0.8,
                                                        test_size=0.2,
                                                        random_state=123)
    from sklearn.svm import SVC
    svc = SVC()
    svc.fit(X_train, Y_train)
    acc_svc = round(svc.score(X_train, Y_train) * 100, 2)
    print("SVM",'n')
    print(acc_svc)

我尝试使用第一个数据框时会收到此错误消息。

ValueError: setting an array element with a sequence.

我知道这个错误与我将数字序列输入到一个数字插槽中有关,而Sklearn不喜欢这样。我似乎无法弄清楚如何修复它,或将数据框重组为可接受的结构。

我无法弄清楚如何将第二个数据框架适合任何分类模型。

是否可以将这两个数据范围中的任何一个正确拟合到SVM模型?

当前, X_trainX_test是列表的数组。用X = [x for x in df3['%CPU']]替换X = df3['%CPU'],这样您最终将使用X_trainX_test是列表的列表,这是Sklearn模型的支持的数据格式。

最新更新