多変量線形回帰練習の一環として、Pythonで勾配降下関数を記述しようとしています。それは実行されますが、正解を計算しません。私のコードは以下の通りです。私はこの問題を終えるのに数週間努力してきましたが、進歩はゼロでした。Pythonの勾配降下アルゴリズム
私は、多変量線形回帰関数を最適化するための勾配降下の概念を理解しており、「数学」は正しいと考えています。私はエラーが私のコードにあると信じていますが、私はまだPythonを学んでいます。あなたの助けは非常に高く評価されています。
def regression_gradient_descent(feature_matrix,output,initial_weights,step_size,tolerance):
from math import sqrt
converged = False
weights = np.array(initial_weights)
while not converged:
predictions = np.dot(feature_matrix,weights)
errors = predictions - output
gradient_sum_squares = 0
for i in range(len(weights)):
derivative = -2 * np.dot(errors[i],feature_matrix[i])
gradient_sum_squares = gradient_sum_squares + np.dot(derivative, derivative)
weights[i] = weights[i] - step_size * derivative[i]
gradient_magnitude = sqrt(gradient_sum_squares)
print gradient_magnitude
if gradient_magnitude < tolerance:
converged = True
return(weights)
機能行列は次のとおりです。
sales = gl.SFrame.read_csv('kc_house_data.csv',column_type_hints = {'bathrooms':float, 'waterfront':int, 'sqft_above':int, 'sqft_living15':float,'grade':int, 'yr_renovated':int, 'price':float, 'bedrooms':float, 'zipcode':str,'long':float, 'sqft_lot15':float, 'sqft_living':float, 'floors':str, 'condition':int,'lat':float, 'date':str, 'sqft_basement':int, 'yr_built':int, 'id':str, 'sqft_lot':int,'view':int})
私はとしての機能を呼んでいる:** get_numpy_dataは配列にすべてを変換するだけの機能であり、意図したとおりに動作し
train_data,test_data = sales.random_split(.8,seed=0)
simple_features = ['sqft_living']
my_output= 'price'
(simple_feature_matrix, output) = get_numpy_data(train_data, simple_features, my_output)
initial_weights = np.array([-47000., 1.])
step_size = 7e-12
tolerance = 2.5e7
simple_weights = regression_gradient_descent(simple_feature_matrix, output,initial_weights,step_size,tolerance)
更新:数式をに修正しました。 0
derivative = 2 * np.dot(errors,feature_matrix)
と思われます。私のオンラインコースで、この式の導出は
-2 * np.dot(errors,feature_matrix)
を使用し、私は、この式は正しい答えを提供しなかった理由はわかりません。
実際の出力と予想される出力を含む使用例を与えることはできますか? – mkrieger1
また、あなたのフィーチャマトリックスがどのように見えるかなど、いくつかの入力を提供できる場合は、 – jlarks32
この関数をどのように正確に呼び出すのですか? –