Python 使用sklearn的Logistic回归中的自定义缩放特征

Python 使用sklearn的Logistic回归中的自定义缩放特征,python,scikit-learn,logistic-regression,Python,Scikit Learn,Logistic Regression,我正在上udemy的一门课程,我正在使用他们提供的自定义定标器函数来缩放数据集中不是假人的功能,但我收到了一个错误。我很确定我已经一行一行地遵循了代码,但我可能错过了一些东西 我已将代码和文件附加到我的 以下是功能: #Custom Scaler to avoid scaling dummies from sklearn.base import BaseEstimator, TransformerMixin from sklearn.preprocessing import StandardS

我正在上udemy的一门课程,我正在使用他们提供的自定义定标器函数来缩放数据集中不是假人的功能,但我收到了一个错误。我很确定我已经一行一行地遵循了代码,但我可能错过了一些东西

我已将代码和文件附加到我的

以下是功能:

#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
TypeError回溯(最近一次调用)
在里面
---->1个缺勤人数=客户人数(列至人数)
TypeError:CustomScaler()不接受任何参数
这似乎很奇怪,因为我通常认为这是通过在函数的括号中包含self来避免的


如果有人能帮助我,我将不胜感激

您的类定义有输入错误。该函数是实例化自定义对象的特殊方法。请注意,它有两个前导和两个尾随,包含单词
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

    ...
现在,您可以将
列\u to \u scale
传递给
CustomScaler
的构造函数,就像您在代码片段中所做的那样:

absenteeism_scaler = CustomScaler(columns_to_scale)

非常感谢你的帮助!