如何使用sklearn预处理器

时间:2019-07-08 13:33:14

标签: python scikit-learn tfidfvectorizer

我有一个包含三列的数据集,我想应用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'])

getattr 中的文件“ C:\ Users \ me \ Anaconda3 \ lib \ site-packages \ scipy \ sparse \ base.py”,行686     引发AttributeError(attr +“ not found”)

AttributeError:未找到转换

1 个答案:

答案 0 :(得分:1)

那是因为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)

您只需要遵循相同的逻辑即可。