【发布时间】:2021-09-12 18:14:09
【问题描述】:
我有这个简单的决策树模型以及预处理
merged_df = pd.read_excel(r'C:\Users\Kiwi\Downloads\data set balance.xlsx')
list_object = ['NAMA', 'TARGET', 'NIM']
merged_df['NIM'] = merged_df['NIM'].apply(str)
num_columns = merged_df.select_dtypes(include=['float64']).columns
cat_columns = merged_df.select_dtypes(include=['object']).drop(list_object, axis=1).columns
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())])
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')),
('label', OneHotEncoder(handle_unknown='ignore'))])
preprocessor = ColumnTransformer(
transformers=[
('num', numeric_transformer, num_columns),
('cat', categorical_transformer, cat_columns)])
X = merged_df.drop(['TARGET','NIM','NAMA','NO.'],1)
y = merged_df['TARGET']
X_train = X
y_train = y
rf = Pipeline(steps=[('preprocessor', preprocessor),
('classifier',tree.DecisionTreeClassifier(
class_weight='balanced', criterion='entropy'))])
rf.fit(X_train, y_train)
print('fitted')
X_test = {'Pendidikan Kewarganegaraan': 'C',
'Pendidikan Agama dalam TIK': 'A-',
'Kepemimpinan dan Pengembangan Karakter': 'A-',
'Bahasa Indonesia untuk TI': 'B-',
'Matematika Diskrit': 'A-',
'Pengantar Multimedia': 'A',
'Algoritma dan Pemrograman': 'B',
'Rekayasa Perangkat Lunak': 'A',
'Jaringan Komputer dan Komunikasi': 'A-',
'Aljabar Linier': 'A-',
'Struktur Data': 'A-',
'Sistem Basis Data': 'B',
'IP_smt1': 2.78,
'IP_smt2': 3.16,
'IP_smt3': 2.85,
'IP_smt4': 3.41,
'IP_smt5': 2.83,
'IP_smt6': 3.37,
'IP_smt7': 3.6,
'IP_s8': 3.16,
'IPK': 3.145
}
pred = rf.predict([X_test])
我正在尝试将单行字典(X_test)传递给模型,但它返回错误提示
ValueError: Expected 2D array, got 1D array instead:Reshape your data either
using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
我不确定是否可以这样做,但根据文档,它说 predict 接受像输入一样的数组,但 dict 也不能重塑。有没有办法解决这个问题或者这是不可能的?
【问题讨论】:
标签: python scikit-learn