Python Can';t获取属性';MyScaler';on<;模块'__主&'&燃气轮机;
我的笔记本上有一节课,如下所示:Python Can';t获取属性';MyScaler';on<;模块'__主&'&燃气轮机;,python,module,attributeerror,Python,Module,Attributeerror,我的笔记本上有一节课,如下所示: class MyScaler(BaseEstimator,TransformerMixin): def __init__(self,columns,with_mean=True,with_std=True,copy=True): self.scaler = StandardScaler(copy,with_mean,with_std) self.columns = columns self.mean_ =
class MyScaler(BaseEstimator,TransformerMixin):
def __init__(self,columns,with_mean=True,with_std=True,copy=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.array(np.mean(X[self.columns]))
self.var_ = np.array(np.var(X[self.columns]))
return self
def transform(self,X,y=None,copy=None):
initial_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)[initial_col_order]
我将本课程作为:
with open('Custom_Scaler','wb') as file:
pickle.dump(MyScaler,file)
我有另一个模块“LogReg\u缺席\u模块”,我正在尝试取消pickle这个文件。我还在该模块中定义了此类,如下所示:
import pandas as pd
import numpy as np
import pickle
from sklearn.preprocessing import StandardScaler
from sklearn.base import BaseEstimator, TransformerMixin
#The custom scaler that only scales the non-dummy value columns.
class MyScaler(BaseEstimator,TransformerMixin):
def __init__(self,columns,with_mean=True,with_std=True,copy=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.array(np.mean(X[self.columns]))
self.var_ = np.array(np.var(X[self.columns]))
return self
def transform(self,X,y=None,copy=None):
initial_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)[initial_col_order]
#The class that we are going to use from here on to predict new data
class absenteeism_model():
def __init__(self,model_file,scaler_file):
with open('Absenteeism_Model','rb') as model_file,open('Custom_Scaler','rb') as scaler_file:
self.log_reg = pickle.load(model_file) #Load the previously saved model
self.scaler = pickle.load(scaler_file) #and scaler.
self.data = None
从一个新笔记本中,当我尝试model=旷工模型('旷工模型','Custom\u Scaler')
我得到:
<ipython-input-66-8631c175353f> in <module>
----> 1 model = absenteeism_model('Absenteeism_Model','Custom_Scaler')
~\LogReg_Absent_Module.py in __init__(self, model_file, scaler_file)
37 with open('Absenteeism_Model','rb') as model_file,open('Custom_Scaler','rb') as scaler_file:
38 self.log_reg = pickle.load(model_file) #Load the previously saved model
---> 39 self.scaler = pickle.load(scaler_file) #and scaler.
40 self.data = None
41
AttributeError: Can't get attribute 'MyScaler' on <module '__main__'>```
in
---->1模型=旷工模型(“旷工模型”,“自定义定标器”)
~\LogReg\u缺席\u init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu中的Module.py(self、model\u文件、scaler\u文件)
37以open(“旷工模型”,“rb”)作为模型文件,以open(“自定义定标器”,“rb”)作为定标器文件:
38 self.log_reg=pickle.load(model_文件)#加载以前保存的模型
--->39 self.scaler=pickle.load(scaler_文件)和scaler。
40自我数据=无
41
AttributeError:无法在上获取属性“MyScaler”```
我不明白你为什么要pickle一个类而不是该类的对象你介意展示一下你实现MyScaler的部分代码吗。我认为,在保存scaler时,MyScaler类的对象存在问题
例如,您已声明:
scaler = MyScaler(X)
在本例中,您将使用以下代码进行pickle:
with open ('Custom_Scaler' , 'wb') as file:
pickle.dump(scaler, file)
看看这是否解决了您的问题。我尝试过清理MyScaler类的对象,但仍然得到AttributeError。如果没有帮助,请尝试使用此文件更改您的缩放器文件: