2016-11-05 136 views
0

我试图构建继承sklearn类Python的继承改变属性类型

class my_lasso(linear_model.Lasso): 

    def __init__(self, alpha=1.0, fit_intercept=True, normalize=False, 
       precompute=False, copy_X=True, max_iter=1000, tol=1e-4, 
       warm_start=False, positive=False, random_state=None, 
       selection='cyclic'): 
     super(my_lasso, self).__init__(
       alpha=alpha, fit_intercept=fit_intercept, 
       normalize=normalize, precompute=precompute, copy_X=copy_X, 
       max_iter=max_iter, tol=tol, warm_start=warm_start, 
       positive=positive, random_state=random_state, 
       selection=selection) 

    def fit(self, x, y): 
     super(my_lasso, self).fit(x, y) 
     self.x = x 
     self.y = y 
     self.residus = self.y - self.predict(self.x) 
     self.r2 = self.score(self.x, self.y) 
     self.error = np.linalg.norm(self.residus) ** 2 
     self.support = np.zeros(x.shape[1]) 
     self.support[self.coef_ != 0] = 1 

我不明白的是,当我测试类它改变了属性intercept_到一个数组

In [5]: testlasso.intercept_ 
Out[5]: array([ 23.44591837]) 

同样,当我试图从LinearRegression继承。 我的系数现在是双排列

In [7]: testls.coef_ 
Out[7]: 
array([[-0.56194996, 0.80247616, -0.0150445 , -5.76399971, 0.23495704, 
    2.77166415]]) 

任何提示?

非常感谢!

回答

0

首先,如果你不覆盖构造函数,那么你不需要该块。

你的代码没问题。 intercept_coef_的形状由number of targets确定,其为2.

+0

Thx!作为一个二维矩阵传递y,现在它的工作很好。 你是什么意思 “如果你不重写构造函数,那么你不需要该块。” – nyounes

+0

谢谢。我的意思是说你可能会失去'__init__'方法,因为你没有重写它。 –