Как использовать препроцессоры sklearn - PullRequest
1 голос
/ 08 июля 2019

У меня есть набор данных с тремя столбцами, я хочу применить алгоритм машинного обучения SVM, но я не знаю, что не так в моем коде

я написал этот код

tfidf_vectorizer = TfidfVectorizer()
attack_data = pd.DataFrame(attack_data, columns = ['payload', 'label', 'attack_type'])
tf_train_data = pd.concat([attack_data['payload'], attack_data['attack_type']])
trained_tf_idf_transformer = tfidf_vectorizer.fit_transform(tf_train_data)
attack_data['tf_idf_payload'] = trained_tf_idf_transformer.transform(attack_data['payload'])
attack_data['tf_idf_attack_type'] = trained_tf_idf_transformer.transform(attack_data['attack_type'])
data_for_model = attack_data[['tf_idf_payload', 'tf_idf_attack_type', 'label']]
x = data_for_model[['tf_idf_payload', 'tf_idf_attack_type']].as_matrix()
y = data_for_model['label'].as_matrix()
with open ("x_result.pkl",'wb') as handls:
        p.dump(trained_tf_idf_transformer,handls)

эта ошибка возникает: attack_data ['tf_idf_payload'] = training_tf_idf_transformer.transform (attack_data ['payload'])

Файл "C: \ Users \ me \ Anaconda3 \ lib \ site-packages \ scipy \ sparse \ base.py", строка 686, в getattr поднять AttributeError (attr + "not found")

AttributeError: преобразование не найдено

1 Ответ

1 голос
/ 08 июля 2019

Это потому, что fit_transform не возвращает преобразователь соответствия, он возвращает преобразованные данные.

trained_tf_idf_transformer = tfidf_vectorizer.fit_transform(tf_train_data)
attack_data['tf_idf_payload'] = trained_tf_idf_transformer.transform(attack_data['payload'])

неверно и должно быть:

tf_train_data_transformed = tfidf_vectorizer.fit_transform(tf_train_data)
attack_data['tf_idf_payload'] = tfidf_vectorizer.transform(attack_data['payload'])

Обратите внимание, что вы можете использовать тот же объект tfidf_vectorizer для преобразования других ваших данных (они были обновлены, когда вы обучили их).

Я не могу использовать ваш пример, так как он не воспроизводим, и мне немного лень разбираться во всех шагах, но посмотрите на этот:

import pandas as pd
from sklearn.preprocessing import StandardScaler

df_train = pd.DataFrame({'data': [1,2,3]})
df_validation = pd.DataFrame({'data': [1,2,3]})

scaler = StandardScaler()
scaler_trained = scaler.fit_transform(df)
df_validation_transformed = scaler_trained.transform(df_validation)

вызывает ту же ошибку.

Этот код работает:

import pandas as pd
from sklearn.preprocessing import StandardScaler

df_train = pd.DataFrame({'data': [1,2,3]})
df_validation = pd.DataFrame({'data': [1,2,3]})

scaler = StandardScaler()
df_train_transformed = scaler.fit_transform(df)
df_validation_transformed = scaler.transform(df_validation)

Вам просто нужно следовать той же логике.

...