以下代码:
from sklearn.preprocessing import LabelBinarizer
lb = LabelBinarizer()
lb.fit_transform(['yes', 'no', 'no', 'yes'])
返回二进制类的向量,如此处所述http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelBinarizer.html
array([[1],
[0],
[0],
[1]])
而二进制类的理想情况是(如MultiLabelBinarizer):
array([[1, 0],
[0, 1],
[0, 1],
[1, 0]])
使用@applecider中的以下类 sklearn LabelBinarizer returns vector when there are 2 classes
import numpy as np
from sklearn.preprocessing import LabelBinarizer
class LabelBinarizer2:
def __init__(self):
self.lb = LabelBinarizer()
def fit(self, X):
# Convert X to array
X = np.array(X)
# Fit X using the LabelBinarizer object
self.lb.fit(X)
# Save the classes
self.classes_ = self.lb.classes_
def fit_transform(self, X):
# Convert X to array
X = np.array(X)
# Fit + transform X using the LabelBinarizer object
Xlb = self.lb.fit_transform(X)
# Save the classes
self.classes_ = self.lb.classes_
if len(self.classes_) == 2:
Xlb = np.hstack((Xlb, 1 - Xlb))
return Xlb
def transform(self, X):
# Convert X to array
X = np.array(X)
# Transform X using the LabelBinarizer object
Xlb = self.lb.transform(X)
if len(self.classes_) == 2:
Xlb = np.hstack((Xlb, 1 - Xlb))
return Xlb
def inverse_transform(self, Xlb):
# Convert Xlb to array
Xlb = np.array(Xlb)
if len(self.classes_) == 2:
X = self.lb.inverse_transform(Xlb[:, 0])
else:
X = self.lb.inverse_transform(Xlb)
return X
然后,我对数据进行fit_变换,whitch提出了一个技巧,但现在不可能使用pickle并存储它,所以稍后加载编码器进行变换并在测试数据上使用它
encoder_leadsourcecode = preprocessing.MultiLabelBinarizer()
feature_leadsourcecode = encoder_leadsourcecode.fit_transform(df["Lead Source Code"])
feature_leadsourcecode = pd.DataFrame(feature_leadsourcecode, columns=encoder_leadsourcecode.classes_)
当我尝试腌制它时:
LeadSourceCodeEnc = pk.dumps(encoder_leadsourcecode)
我得到以下信息:
AttributeError: Can't pickle local object 'transform.<locals>.LabelBinarizer2'
那么,我们如何处理自定义对象呢
目前没有回答
相关问题 更多 >
编程相关推荐