Я работаю над «моделями взвешенных сумм» вида w1 * a + w2 * b + w3 * c.У меня есть несколько объектов с параметрами a, b, c, и я знаю, например, что объект 1 с a = 50, b = 100 и c = 150 принадлежит классу 1, а объект 2 с a = 100, b = 0 и c = 50принадлежит классу 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]
но я не знаю, как это сделать.Я также не совсем уверен, имеет ли смысл определять вес таким образом.
Любая помощь или мысли будут высоко оценены.
Спасибо!