交叉验证加权和

时间:2018-10-18 19:32:30

标签: python scikit-learn cross-validation grid-search

我正在研究形式为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]

但是我不知道该怎么做。我也不太确定以这种方式确定权重是否有意义。

任何帮助或想法都会受到赞赏。

谢谢!

0 个答案:

没有答案