私は、scipyの共役勾配アルゴリズム(fmin_cg)を使用して線形モデル内で最良のフィットを与えるパラメータthetaを見つけようとしています。scipyのfmin_cgの勾配関数
データファイルHouseData.csv(例えば住宅エリア、住宅価格):
120, 250
200, 467
250, 500
1200, 2598
1500, 3000
コードは次のとおりです。fprime = gradfコードが正しい結果を返しますが、何でなければ
from scipy import optimize
import numpy as np
data=np.genfromtxt('HouseData.csv',delimiter=',')
X=np.c_[np.ones(len(data)),data[:,:-1]]
Y=data[:,[-1]]
def cost_Function(theta):
theta1=theta[np.newaxis].T
#print('theta: ',theta1)
cost = Y-np.dot(X, theta1)
return (cost*cost).sum()
# Gradient Function
def gradf(theta):
theta1 = theta[np.newaxis].T
cost = Y - np.dot(X, theta1)
#print('cost*X.sum(0) is', np.sum(cost*X,axis=0))
return np.sum(cost*X,axis=0)
x0 = np.asarray((0,1)) #initial guess
result = optimize.fmin_cg(cost_Function,x0,fprime=gradf)
print(result)
グラジエント関数の問題?上記のように含めると、アルゴリズムはthetaの入力を正確に返します。パフォーマンスを向上させるために別の実装方法がありますか? これは単なる単なる例ですが、アルゴリズムは多くの列と行を持つXでも実行する必要があります。
(のpython 3.5.1、scipyのダウンロードとnumpyの最新バージョン)
パフォーマンスを改善していますか?まあ... CGは使わず、QR分解を使ってください。 [ここ](http://stats.stackexchange.com/questions/175983/whats-the-underlying-algorithm-used-by-rs-lm)および[ここ](http://stats.stackexchange.com)も参照してください。/questions/94496/lm-function-in-r) – sascha
このコードは機能しますか? 'args [0]'の代わりに 'args'を使うべきですね – Eric
私はあなたのグラデーション関数が正しいとは思わない – Eric