【パイソン】適切なパラメータ値を見つけるために、バッチ勾配降下を使用して単変量線形回帰を機械学習
アンドリュー・ウ機械学習ビデオからこのタイトル。
トピック:
(記事最も下のデータは)あなたは他の都市に支店を開きたい、レストランのオーナーですので、あなたには、いくつかのデータを取得し、データが別の都市人口と都市によって引き起こされる利益に含まれています。最初の列は、2番目の列は店がもたらす都市の利益の数で、市の人口の数です。
今、開始θ0を仮定し、ここで、学習率α、θの適切な値を見つけるために、勾配降下法を用いて、0θ1いる= 1000 0.01、反復ラウンド
前回の記事では、我々は費用関数、機能の喪失、すなわちになってきました。
今、私たちはθの最小損失関数値を作るために見つける必要がある、勾配降下機能
1、リーダーパケット
インポートのNPとしてnumpyの 輸入のPdとしてパンダ 輸入 PLTとしてmatplotlib.pyplot
費用関数の関数の前に書かれた2、
DEF computeCost(X、Y、シータ): 内側 = np.power(((X * theta.T) - Y)、2 ) リターン np.sum(内側)/(2 * LEN(X))
図3に示すように、X及びYを分離するために文書の導入に加えて左側X 1、及びθは0 0,0θ1に設定されています
パス= ' ex1data1.txt ' データ = pd.read_csv(パス、ヘッダ=なし、名前= [ ' 人口'、' 利益' ])
data.insert(0、 'ワンズ'、1)
行= data.shape [0]
COLS = data.shape [1]
X = data.iloc [:, 0:COLS - 1]
Y = data.ilocの[:, COLS - 1:COLS]
シータ= np.mat( '0,0')
X = np.mat(X.values)
Y = np.mat(Y.values)
コスト= computeCost(X、Y、シータ)
図4に示すように、0.01の設定更新率αは、反復の数は1000に設定します
アルファ= 0.01
iters = 1500
5、勾配降下機能を実現するために書きます
DEF gradientDescent(X、Y、シータ、アルファ、iters): TEMP = np.mat(np.zeros(theta.shape)) #アレイ、一時θの大きさは、数ある パラメータ= INT(theta.ravel()。 [1]形状) #のパラメータの数 コスト= np.zeros(iters) #各メモリ費用関数の計算値を持つ配列、 のための I における範囲(iters): 誤差 =(X-theta.T *) - Y; #のエラー値 のための J における範囲(パラメータ) 用語 = np.multiply(誤差、X- [:, J]) TEMP [0、j]はシータ[0、J = - ((アルファ/ LEN(X-)を)* np.sum(期間)) シータ =一時 コスト[I] = computeCost(X、Y、シータ) リターンシータ、コスト
解像度:
必要なすべての同期更新θは、一時的な変数に格納された第一に、同期されるまですべての値のθ後部完全計算が更新されるため、TEMPは、一時変数格納された配列です。
int値は、パラメータの数、変数のすなわち数であり、この問題は、θ0と角度θ1を有するように、パラメータ= 2
コスト、サイズ、および反復の同じ数、現在の反復費用関数の戻り値に格納された各レイヤのアレイであります
図6に示すように、関数を呼び出し、その結果を返します
G、コスト= gradientDescent(X、Y、シータ、アルファ、iters) プリント(G)
最終的な結果G = [ - 3.24140214 1.1272942]
すなわち、最後θ0= -3.24θ1= 1.127
7、収束かどうかを確認するために、マップを抜け出します
図、AX = plt.subplots(figsize =(12,8 )) ax.plot(np.arange(iters)、コスト、' R ' ) ax.set_xlabel(' 反復' ) ax.set_ylabel(' コスト' ) PLT 。公演()
イテレーションのitersの数の拡大とともに、損失がゆっくりと正確に算出するので、効果的で、減少しました。