2017-08-23 1 views
0

制約付き損失最小化を使用してnumpyとscipyで回帰を実行しました。ここでの例は次のとおりnumpyを使用した制約で、損失最小化からr_squaredを取得するにはどうすればよいですか?

y_values我々は、係数のいくつかは、いくつかの入力重みを乗じたように、制約と、Y = Xcのを解決するX行列は

ある

x_matrix_trans値numObservations有するベクトルであります私の回帰がres.xで正しい値を生成するが、私はまたr_squaredとr_squared調整を計算するために必要な。

def constraint1(x): 
     res = 0 
     for i in range (0, NUM_WEIGHTS): 
      res = res + x[CONST_VAL + i] * weights[CONST_VAL + i] 
     return res 

    def loss(x): 
     return np.sum(np.square((np.dot(x, x_matrix_trans) - y_values))) 

    cons = ({'type': 'eq', 
      'fun' : constraint1}) 

    x0 = np.zeros(x_matrix_trans.shape[0])   
    res = minimize(loss, x0, method='SLSQP',constraints=cons, options={'disp': True, 'maxiter' : 1000, 'ftol' : 1e-07}) 
    print(res.x) 

0に合計しなければなりません私はr_squaredを計算しようとしましたが、それらは間違っていました。ここで

は私がr_squaredを計算しようとした方法です:

adjRsq = 0.0 
    if ((num_coefficients - num_observations - 1) != 0): 
     adjRsq = rsq - (1-rsq)*(num_coefficients - 1)/(num_observations -num_coefficients - 1) 

ありがとう:ここ

ymeas = y_values 
    yfit = np.dot(res.x, x_matrix_trans) 
    ss_res = np.sum((ymeas - yfit) ** 2) 
    ss_tot = np.var(ymeas) * len(ymeas) 
    rsq = 1 - ss_res/ss_tot 

は私が調整さr_squaredを計算しようとした方法です。

+0

はたぶん、あなたはあなたの結果が正しくない感じるものの中に言うことができなければなりません調整r_squareの例外を除いて。 –

答えて

0

まあ、私の答えは正しいと思います。ウィキペディアによる

adjRsq = rsq - (1-rsq)*(num_coeff)/(num_observations-num_coeff-1) 

なく

adjRsq = rsq - (1-rsq)*(num_coeff - 1)/(num_observations-num_coeff-1) 
関連する問題