Кросс-валидационная взвешенная сумма
Я работаю над "моделями взвешенной суммы" вида 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]
но я не знаю как это сделать. Я также не совсем уверен, имеет ли смысл определять веса таким образом.
Любая помощь или мысли будут высоко оценены.
Спасибо!