machine-learning - StandardScaler , OneHotEncoder 在以不同顺序使用时显示不同的分数
问题描述
我有一个包含多行的桌面输入数据框,如下所示:
Company TypeName Ram Weight Touch Ips ppi Cpu HDD SSD Gpu os
0 Apple Ultrabook 8 1.37 0 1 226.983005 Intel Core i5 0 128 Intel Mac
1 Apple Ultrabook 8 1.34 0 0 127.677940 Intel Core i5 0 0 Intel Mac
2 HP Notebook 8 1.86 0 0 141.211998 Intel Core i5 0 256 Intel Win
.
.
最后有一个价格列成为目标列。我正在尝试应用简单的线性回归模型(具有多项式特征),但我看到 r2_score 有很多差异!
问题 1. 为什么以下两个代码的 r2_scores 差异如此之大?
//一个。StandardScaler 然后 OneHotEncoder:
kf = KFold(n_splits=3, shuffle=True, random_state=2)
ss = StandardScaler()
scale = ColumnTransformer(transformers=[
('scale',StandardScaler(),[2,3,4,5,6,8,9])
],remainder='passthrough')
col_tnf = ColumnTransformer(transformers=[
('col_tnf',OneHotEncoder(sparse=False,drop='first'),[7,8,9,10,11])
],remainder='passthrough')
pf = PolynomialFeatures(degree=2)
lr = LinearRegression()
pipe = Pipeline([
('scale', scale),
('col_tnf',col_tnf),
('pf', pf),
('lr',lr)
])
r2_score(y, cross_val_predict(pipe, X,y, cv=kf)) # gives output as -2.7004063755764876e+21
//b。OneHotEncoder 然后是 StandardScaler:
kf = KFold(n_splits=3, shuffle=True, random_state=2)
ss = StandardScaler()
col_tnf = ColumnTransformer(transformers=[
('col_tnf',OneHotEncoder(sparse=False,drop='first'),[0,1,7,10,11])
],remainder='passthrough')
std_scaler = ColumnTransformer(transformers=[
('std_scaler',StandardScaler(),[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37])
],remainder='passthrough')
pf = PolynomialFeatures(degree=2)
lr = LinearRegression()
pipe = Pipeline([
('col_tnf',col_tnf),
('pf', pf),
('std_scaler', std_scaler),
('lr',lr)
])
r2_score(y, cross_val_predict(pipe, X,y, cv=kf)) # gives r2_score as 0.6137227291296413
问题 2. 如何干净地为“std_scaler”提供从 0 到 37 的全范围列,而不是提及每一列?
问题 3. 如果我设置: kf = KFold(n_splits=3)
,第一个代码没有随机播放。上面,它总是抛出异常,如:在转换过程中在第 0 列中找到未知类别 ['Huawei']
我究竟做错了什么!非常感谢任何指示。
解决方案
推荐阅读
- javascript - 如何使用多个js脚本在html中使用全局var
- java - 在springboot上实现模型继承有奇怪的数据存储库行为
- powershell - Powershell 复制 CSV 输出并粘贴到另一个 CSV 的第二列
- java - 我的 GUI 程序中的 .add 有什么问题?
- python - 如何并行运行 Tensorboard
- python - Python - AttributeError:'function'对象没有属性'rank'
- angular - 角度多个ngIf多个条件分配为值?
- jquery - 中继器中的 JQuery 函数只工作一次
- python - 在一行上写 if 语句是否可以接受?
- javafx - 如何用右对齐修复颤抖的文本?