【问题标题】:How to use sklearn pre-processors如何使用 sklearn 预处理器
【发布时间】:2019-11-18 00:52:50
【问题描述】:

我有一个包含三列的数据集,我想应用 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'] =trained_tf_idf_transformer.transform(attack_data['payload'])

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

AttributeError: 未找到转换

【问题讨论】:

    标签: python scikit-learn tfidfvectorizer


    【解决方案1】:

    这是因为 fit_transform 不返回 fit 转换器,而是返回转换后的数据。

    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)
    

    你只需要遵循同样的逻辑。

    【讨论】:

    猜你喜欢
    • 2020-05-11
    • 2021-12-18
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2017-08-04
    • 2020-11-30
    • 2019-04-18
    相关资源
    最近更新 更多