我正在研究形式为w1 * a + w2 * b + w3 * c的“加权和模型”。我有几个带有参数a,b,c的对象,例如,我知道a = 50,b = 100和c = 150的对象1属于1类,而a = 100,b = 0和c = 50的对象2属于类别1属于第2类。现在,我正在尝试为我的加权和模型确定最佳权重(w1,w2,w3)。所以我想知道是否可以在scikit-learn中创建自己的分类器并使用gridSearchCV和交叉验证。我已经实现了一个代码,并且尝试更改它以实现加权和模型。到目前为止,这是我所做的。
我的分类器代码:
class MyClassifier(BaseEstimator, ClassifierMixin):
def __init__(self, weight1=0, weight2 = 0, weight3 = 0):
self.intValue = weight1
self.intValue = weight2
self.intValue = weight3
def fit(self, X, y):
X, y = check_X_y(X, y)
self.classes_ = unique_labels(y)
self.X_ = X
self.y_ = y
return self
def predict(self, X):
check_is_fitted(self, ["X_", "y_"])
X = check_array(X)
#I think here, I should change the code
closest = np.argmin(euclidean_distances(X, self.X_), axis=1)
self.X_)+ self.intValue, axis=1)
return self.y_[closest]
现在我可以正常使用Gridsearch了:
dtc = MyClassifier()
dtc.fit(x,y)
cross_validation = StratifiedKFold(n_splits=10)
parameter_grid = {"weight1" : [-10,-1,0,1,10], "weight2" : [-10,-1,0,1,10], "weight3" : [-10,-1,0,1,10]}
grid_search = GridSearchCV(dtc, param_grid=parameter_grid,cv = cross_validation)
grid_search.fit(x, y)
我知道我必须以某种方式介绍我的加权和模型而不是线条
closest = np.argmin(euclidean_distances(X, self.X_), axis=1)
return self.y_[closest]
但是我不知道该怎么做。我也不太确定以这种方式确定权重是否有意义。
任何帮助或想法都会受到赞赏。
谢谢!