我已經閱讀了很多關于這方面的文章,這些文章參考了get_feature_names()來自 sklearn 的文章,這些文章現在似乎已被棄用并被get_feature_names_out我無法開始作業的任何一個所取代。似乎也無法將 get_feature_names(或 get_feature_names_out)與 ColumnTransformer 類一起使用。因此,我嘗試使用 SimpleImputer 和 StandardScaler 類擬合和轉換我的數值列,然后是 SimpleImpute ('most_frequent') 和 OneHotEncode 分類變數。我單獨運行它們,因為我無法將它們放入管道中,然后我嘗試 get_feature_names 并且結果如下:
ValueError: input_features should have length equal to number of features (5), got 11
我還嘗試僅獲取分類特征以及數字的特征名稱,并且每個都分別給出以下錯誤:
ValueError: input_features should have length equal to number of features (5), got 121942
和
ValueError: input_features should have length equal to number of features (5), got 121942
我完全迷失了方向,并且還接受了一種更簡單的方法來獲取特征名稱,這樣我就可以確保在訓練/測驗之后運行此模型的產品資料具有與模型被訓練期望的完全相同的特征(這是這里的根本問題)。
如果我通過嘗試獲取根本問題中概述的推理的功能名稱來“找出錯誤的樹”,我也非常愿意得到糾正。這是我的代碼:
#ONE HOT
import sklearn
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
# !pip install -U scikit-learn
print('The scikit-learn version is {}.'.format(sklearn.__version__))
numeric_columns = X.select_dtypes(include=['int64','float64']).columns
cat_columns = X.select_dtypes(include=['object']).columns
si_num = SimpleImputer(strategy='median')
si_cat = SimpleImputer(strategy='most_frequent')
ss = StandardScaler()
ohe = OneHotEncoder()
si_num.fit_transform(X[numeric_columns])
si_cat.fit_transform(X[cat_columns])
ss.fit_transform(X[numeric_columns])
ohe.fit_transform(X[cat_columns])
ohe.get_feature_names(X[numeric_columns])
謝謝!
uj5u.com熱心網友回復:
我認為這應該作為一個單一的復合估計器來完成你的所有轉換并提供get_feature_names_out:
num_pipe = Pipeline([
("imp", si_num),
("scale", ss),
])
cat_pipe = Pipeline([
("imp", si_cat),
("ohe", ohe),
])
preproc = ColumnTransformer([
("num", num_pipe, numeric_columns),
("cat", cat_pipe, cat_columns),
])
理想情況下,您應該保存擬合的組合并使用它來轉換生產資料,而不是使用特征名稱來協調不同的類別。
您還應該僅在訓練集上擬合此組合,分別轉換測驗集。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/479021.html
