使用 sklearn 的逻辑回归中的自定义缩放功能
Custom Scaling features in Logistic Regression using sklearn
我正在上一门关于 udemy 的课程,我正在使用他们提供的自定义缩放器函数来缩放数据集中不是虚拟的特征,但我收到了一个错误。我很确定我已经逐行跟踪了代码,但我可能漏掉了一些东西
我已将代码和文件附加到我的 github
函数如下:
#Custom Scaler to avoid scaling dummies
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.preprocessing import StandardScaler
class CustomScaler(BaseEstimator, TransformerMixin):
def _init_(self,columns, copy=True, with_mean=True, with_std=True):
self.scaler = StandardScaler(copy, with_mean, with_std)
self.columns = columns
self.mean_ = None
self.var_ = None
def fit(self, X, y=None):
self.scaler.fit(X[self.columns], y)
self.mean_ = np.mean(X[self.columns])
self.var_ = np.var(X[self.columns])
return self
def transform(self, X, y=None, copy=None):
init_col_order = X.columns
X_scaled = pd.DataFrame(self.scaler.transform(X[self.columns]), columns=self.columns)
X_not_scaled = X.loc[:,~X.columns.isin(self.columns)]
return pd.concat([X_not_scaled, X_scaled], axis=1)[init_col_order]
然后我将要缩放的列拉入变量并调用函数:
unscaled_inputs.columns.values
columns_to_scale=['Month Value','Day of the Week', 'Transportation Expense', 'Distance to Work',
'Age', 'Daily Work Load Average', 'Body Mass Index', 'Children', 'Pets']
absenteeism_scaler = CustomScaler(columns_to_scale)
然后输出如下错误:
TypeError Traceback (most recent call last)
<ipython-input-26-c6390babc5b1> in <module>
----> 1 absenteeism_scaler = CustomScaler(columns_to_scale)
TypeError: CustomScaler() takes no arguments
这看起来很奇怪,因为我通常认为这是通过将 self 包含在函数的括号中来避免的。
如果有人能提供帮助,我将不胜感激!
您的 class 定义有错字。 __init__()
函数是实例化自定义对象的特殊方法。观察它有 两个前导 和 两个尾随 _
包含单词 init
,而你的每边只有一个。
正确的定义应该是:
class CustomScaler(BaseEstimator, TransformerMixin):
def __init__(self,columns, copy=True, with_mean=True, with_std=True):
self.scaler = StandardScaler(copy, with_mean, with_std)
self.columns = columns
self.mean_ = None
self.var_ = None
...
现在您可以像在代码片段中那样将 columns_to_scale
传递给 CustomScaler
的构造函数:
absenteeism_scaler = CustomScaler(columns_to_scale)
我正在上一门关于 udemy 的课程,我正在使用他们提供的自定义缩放器函数来缩放数据集中不是虚拟的特征,但我收到了一个错误。我很确定我已经逐行跟踪了代码,但我可能漏掉了一些东西
我已将代码和文件附加到我的 github
函数如下:
#Custom Scaler to avoid scaling dummies
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.preprocessing import StandardScaler
class CustomScaler(BaseEstimator, TransformerMixin):
def _init_(self,columns, copy=True, with_mean=True, with_std=True):
self.scaler = StandardScaler(copy, with_mean, with_std)
self.columns = columns
self.mean_ = None
self.var_ = None
def fit(self, X, y=None):
self.scaler.fit(X[self.columns], y)
self.mean_ = np.mean(X[self.columns])
self.var_ = np.var(X[self.columns])
return self
def transform(self, X, y=None, copy=None):
init_col_order = X.columns
X_scaled = pd.DataFrame(self.scaler.transform(X[self.columns]), columns=self.columns)
X_not_scaled = X.loc[:,~X.columns.isin(self.columns)]
return pd.concat([X_not_scaled, X_scaled], axis=1)[init_col_order]
然后我将要缩放的列拉入变量并调用函数:
unscaled_inputs.columns.values
columns_to_scale=['Month Value','Day of the Week', 'Transportation Expense', 'Distance to Work',
'Age', 'Daily Work Load Average', 'Body Mass Index', 'Children', 'Pets']
absenteeism_scaler = CustomScaler(columns_to_scale)
然后输出如下错误:
TypeError Traceback (most recent call last)
<ipython-input-26-c6390babc5b1> in <module>
----> 1 absenteeism_scaler = CustomScaler(columns_to_scale)
TypeError: CustomScaler() takes no arguments
这看起来很奇怪,因为我通常认为这是通过将 self 包含在函数的括号中来避免的。
如果有人能提供帮助,我将不胜感激!
您的 class 定义有错字。 __init__()
函数是实例化自定义对象的特殊方法。观察它有 两个前导 和 两个尾随 _
包含单词 init
,而你的每边只有一个。
正确的定义应该是:
class CustomScaler(BaseEstimator, TransformerMixin):
def __init__(self,columns, copy=True, with_mean=True, with_std=True):
self.scaler = StandardScaler(copy, with_mean, with_std)
self.columns = columns
self.mean_ = None
self.var_ = None
...
现在您可以像在代码片段中那样将 columns_to_scale
传递给 CustomScaler
的构造函数:
absenteeism_scaler = CustomScaler(columns_to_scale)