【问题标题】:ValueError: Number of features of the model must match the input. Model n_features is 10 and input n_features is 1ValueError:模型的特征数量必须与输入匹配。模型 n_features 为 10,输入 n_features 为 1
【发布时间】:2020-10-01 16:35:59
【问题描述】:

我正在使用 sklearn 和 python 构建隔离林,并遇到错误“ValueError:模型的特征数必须与输入匹配。模型 n_features 为 24,输入 n_features 为 1。我正在尝试从各种尺寸特征中预测“页面”。我正在使用的实际数据集有 300 行和 14 列。第一个和第二个无关紧要,然后有 10 个“大小”标签,然后是“页面”列,所以我不确定为什么它说输入是 1。我在下面附上了一些代码以及数据的样子,谢谢你!

X = df.iloc[:, 2:12].values
y = df['pages']
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
model = IsolationForest(n_estimators = 100, max_samples = 'auto', contamination = 'auto')
model.fit(df[['pages']])
df['anomaly']=model.fit_predict(df[['size2','size3','size4', 'size5','size6','size7','size8','size9','size10','size11']])
df['anomaly']= model.predict(df[['pages']])
print(model.predict(X_test))
print(df.head(10))
anomaly = df.loc[df['anomaly']==-1]
anomaly_index = list(anomaly.index)
print(anomaly)

【问题讨论】:

    标签: scikit-learn isolation


    【解决方案1】:

    首先,您是否知道不能将IsolationForest 用于“根据各种尺寸特征预测页面”的目标?在docs 中写道,该算法返回每个样本的异常分数,始终忽略传递给模型的任何目标。

    话虽如此,错误的发生是由于以下几行:

    df['anomaly'] = model.fit_predict(df[['size2','size3','size4', 'size5','size6','size7','size8','size9','size10','size11']])
    

    您适合包含 10 个变量的数据框的位置,然后:

    df['anomaly']= model.predict(df[['pages']])
    

    您将原始目标(仅 1 列)传递给 predict 函数的位置。我真的不明白这里的目标。但你绝对不能那样做。

    【讨论】:

    • 对,我正在使用隔离森林来检测给定数据集的异常情况,并且该数据集还用于构建随机森林分类器,从大小预测“页面”。我正在尝试制作一个模型,我可以将数据输入并返回异常。很抱歉造成混乱!
    猜你喜欢
    • 2021-04-14
    • 2021-01-19
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2021-08-04
    • 2018-11-08
    相关资源
    最近更新 更多