如何修复 X ​​没有有效的功能名称,但 IsolationForest 配备了功能名称 warnings.warn(

Mar*_*yan 10 python pandas scikit-learn

这是我的代码:

import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.ensemble import IsolationForest

data = pd.read_csv('marks1.csv', encoding='latin-1',
                   on_bad_lines='skip', index_col=0, header=0
                   )

random_state = np.random.RandomState(42)

model = IsolationForest(n_estimators=100, max_samples='auto', contamination=float(0.2)
                        , random_state=random_state)

model.fit(data[['Mark']])

random_state = np.random.RandomState(42)

data['scores'] = model.decision_function(data[['Mark']])

data['anomaly_score'] = model.predict(data[['Mark']])

data[data['anomaly_score'] == -1].head()
Run Code Online (Sandbox Code Playgroud)

错误:

C:\Program Files\Python39\lib\site-packages\sklearn\base.py:450: UserWarning: X 没有有效的功能名称,但 IsolationForest 配备了功能名称 warnings.warn(

Joe*_*oli 16

这取决于您使用的 sklearn 版本。在 1.0 以后的版本中,当使用集成列名称的数据帧进行训练时,模型具有 feature_names 属性。此版本中存在一个错误,在使用数据帧进行训练时会引发错误。 https://github.com/scikit-learn/scikit-learn/issues/21577

我还没有掌握最新的最佳实践,所以我不能明确地说应该如何设置。但我现在只是在代码中回避了这个问题。为了解决这个问题,我在训练之前将数据帧转换为 numpy 数组

df.to_numpy()
Run Code Online (Sandbox Code Playgroud)

  • 可以确认这“减轻”了警告。不确定是否有副作用。 (2认同)