Каков наилучший подход для построения модели SVM с использованием sklearn на основе даты с функциями, содержащими несколько значений? - PullRequest
0 голосов
/ 08 июля 2019

Я читаю несколько файлов CSV в кадре данных. Каждый файл содержит несколько столбцов и строк данных, из которых я пытаюсь построить модель для классификации каждого файла в качестве целевой метки «1» или целевой метки «0». Мне удалось сгруппировать столбцы по «файлу», и каждая функция содержит несколько значений. Я пытаюсь правильно разделить данные на обучающие и тестовые наборы, чтобы можно было построить модель SVM для прогнозирования правильной метки.

Каков будет хороший подход при построении модели с заданной структурой данных? Какой фрейм данных будет эффективнее использовать при попытке построить модель.

Я попытался выполнить индексирование по «файлу» с его характеристиками (% CPU) и целевыми значениями.

    os.chdir("E:\Research Machine Learning\ComputerDebugging\\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 Learning\ComputerDebugging\\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()

2-й кадр данных:

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 это не нравится. Я не могу понять, как это исправить или реструктурировать структуру данных в приемлемую структуру.

Я не смог понять, как вписать 2-й кадр данных в какие-либо модели классификации.

Есть ли способ правильно подогнать любой из этих двух фреймов данных к модели SVM?

1 Ответ

0 голосов
/ 08 июля 2019

В настоящее время X_train, X_test являются массивами списков.Замените X = df3['%CPU'] на X = [x for x in df3['%CPU']], и в результате вы получите X_train и X_test как списки списков, которые являются поддерживаемым форматом данных для моделей sklearn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...