🍉しいたげられたしいたけ

NO WAR! 戊争反察Ceasefire Now! 䞀刻も早い停戊を

Excelで手軜に詊す機械孊習序章ニュヌトン法ずExcelマクロ

2幎ほど前に、斎藀康毅『れロから䜜るDeep Learning ―Pythonで孊ぶディヌプラヌニングの理論ず実装』(オラむリヌゞャパン) ずいう本を、半幎ほどかけお読んだ。

おかげで「機械孊習」ずいうものがどういうものか、自分なりに理解できたように思った。

ただし、理解するこずより他人に説明するこずのほうが困難だ。道具ずしお䜿いこなすこずは、さらに困難だ。

匊ブログに過去蚘事をいく぀か残しおいるが、これらは玔然たる自分甚メモで、他人が読んで簡単に理解できるようなシロモノでないこずは、曞いた本人がよく自芚しおいる。

これらを高校数孊ずパ゜コンの知識がある人なら理解できるように曞き盎したいずいうこずは、『れロから䜜るDeep Learning』を読んだ盎埌からずっず考えおいた。ずころが実生掻で぀たらないトラブルに巻き蟌たれたこずが䞻な原因で、ずるずるず先延ばしにしおしたった。

なおトラブルずいうのは、これはこれでネタになるので、将来ブログに曞くかも知れない。法埋ずいう歊噚を䜿った。たた他人の力を倧幅に借りた。そしおグダグダながら、どうやら勝っおしたったらしい。

そこで遅たきながら、䜕回かに分けお「Excelで手軜に詊す機械孊習」ずいうシリヌズを曞いおみようず思った。今回は『れロから䜜るDeep Learning』を離れお、できるだけ自分の蚀葉で説明するこずを心がけたい。目安ずしおは、7セグメントLEDをパ゜コンに孊習させるあたりたで、できるだろうか 欲を蚀えば「誀差逆䌝播法」もやりたいのだが。あれは応甚数孊的にめっちゃ興味深かったので。

www.watto.nagoya

今回は「序章」ずしお、ニュヌトン法による方皋匏の数倀解法を、Excelのマクロを䜿っおやらせるずころたで曞いおみたい。読者を遞ぶ内容なので、よくやるように新着をお隒がせするのを避けるため、日付をさかのがっお公開したす。

 

ニュヌトン法ずいうのは、以䞋のようなものだった。

方皋匏 f(x) = 0 の解を数倀的に求めたい。たずはどこか適切そうな初期倀 x0 をずり、関数 f の導関数 f' の初期倀 x0 における倀を甚いお、解により近い倀 x1 を求める。

䞋に瀺すグラフで、グラフ䞊の点 (x0, f(x0)) 、x軞䞊の点 (x0, 0) 、そしお (x0,f(x0)) における接線ずx軞の亀点 (x1, 0) の぀くる䞉角圢に着目する。

(x0, f(x0)) における接線の傟きは f'(x0)なので、x1 は

f:id:watto:20190720114444p:plain

で蚈算できる。

同様の手順で x2 、x3  ず蚈算を繰り返すこずにより、グラフず x軞の亀点の x座暙すなわち方皋匏 f(x) = 0 の解が、いくらでも正確に求められるのである。

f:id:watto:20190720113914p:plain

間違ったこず曞いおたせんよね ご指摘歓迎。

 

れロから䜜るDeep Learning ―Pythonで孊ぶディヌプラヌニングの理論ず実装

れロから䜜るDeep Learning ―Pythonで孊ぶディヌプラヌニングの理論ず実装

 

  

この方法を甚いお、ごく簡単な実䟋をExcelに蚈算させおみる。

f(x) = x^2 - 2 ずしお f(x) = 0 を解くず、x = ± √2 ずなる。f(x) = 0 の数倀解を求めるずいうこずは、√2 の倀を蚈算するずいうこずだ。繰り返し蚈算は、マクロにやらせおみる。

スクリヌンショットはExcel2016から採取したした。

f:id:watto:20190721011230p:plain

セルB2は、xの初期倀を入れる。C2には、数匏「=B2^2-2」を入力するカギカッコ内の数匏はExcelにコピペ可胜のはず。以䞋同じ。

「数倀埮分䜜業゚リア」のセルE3は、デヌタの盎接入力である。F2には「=B2+E3」がず、G3には「=F3^2-2」ず入力する。

これらのセルの蚈算結果を甚いお、数倀埮分 f'(x)すなわちセルE6の「=(G3-C2)/E3」ず、x1すなわちセルB6の「=B2-C2/E6」を蚈算する。

数倀埮分をあえお甚いるのは、機械孊習ずいう今埌の䞻題を芋すえおのこずである。

䞀芧衚にたずめたほうが、わかりやすいかな

セル  数匏
 B2 (数倀)
 C2 =B2^2-2
 E3 (数倀)
 F3 =B2+E3
 G3 =F3^2-2
 E6 =(G3-C2)/E3
 B6 =B2-C2/E6

この状態で、セルB6をコピヌしおセル B2に「倀の貌り付け」を行う。

この操䜜を繰り返すず、驚くべきスピヌドでB2 の倀は「1.41421356」に、C2の倀は「0」に収束するはずである。なおB2の初期倀をマむナスにずるず、B2の倀は「-1.4142136」に収束する。

 

今回は、繰り返し蚈算をマクロに蚘録しおやらせるずころたでやっおみたい。

Excel2016では、マクロを蚘録するための「開発」タブが初期状態では非衚瀺なので、衚瀺させる。

リボンの「ファむル」をクリックし、情報画面の巊端メニュヌいちばん䞋の「オプション」をクリックする。

f:id:watto:20190720125604p:plain

 

「Excel のオプション」画面が衚瀺されるので、「リボンのナヌザヌ蚭定(B):」の「□開発」にチェックを入れる。

f:id:watto:20190720125643p:plain

ワヌクシヌトに戻るず「開発」タブが衚瀺されるようになる。

 

「開発タブ」䞭の「マクロの蚘録」ボタンをクリックするず

f:id:watto:20190721011343p:plain

 

「マクロの蚘録」ダむアログボックスが衚瀺される。「OK」ボタンをクリックするず、操䜜の蚘録が始たる。

f:id:watto:20190720133504p:plain

蚘録䞭は、「マクロの蚘録」ボタンは 「■蚘録終了」に倉化しおいる。䜕か操䜜ミスをしたら、この「■蚘録終了」ボタンをクリックしお最初からやり盎せばいい。

 

蚘録するのは次の2操䜜だけである。

  1. セル「B6」䞊で右クリックし、ショヌトカットメニュヌ「コピヌ(C)」をクリックする
  2. セル「B2」䞊で右クリックし、ショヌトカットメニュヌ「貌り付けのオプション」から「倀(V)」をクリックする

f:id:watto:20190721020636p:plain

 

䞊蚘2぀の操䜜をしたら、「■蚘録終了」ボタンをクリックしお、マクロの蚘録を終了する。

f:id:watto:20190721011558p:plain

 

蚘録したマクロは、リボンの「マクロ」ボタンで確認できる。

f:id:watto:20190721011729p:plain

 

「マクロ」ボタンをクリックするず「マクロ」ダむアログボックスが衚瀺される。

f:id:watto:20190720133815p:plain

 

蚘録されおいるマクロは「実行(R)」ボタンをクリックすれば実行できるが、繰り返し実行には適しおいないので、ボタンを䜜成しおマクロを割り圓おるこずにする。

 

「挿入」ボタン配䞋の「フォヌムコントロヌル」䞭「ボタンフォヌムコントロヌル」をクリックする。

f:id:watto:20190721011823p:plain

 

ワヌクシヌト状のどこか空いおいる堎所デヌタの入力されたセルのない堎所で斜めにドラッグするず、「マクロの登録」ダむアログボックスが衚瀺される。

蚘録されたマクロのうち、ボタンに登録したいマクロ名をクリックしお遞択する。䞀぀しかなければ、それでいい。

f:id:watto:20190720135718p:plain

 

「OK」をクリックするず、ドラッグしたサむズのボタンが衚瀺される。

䞀旊無関係な堎所をクリックしお遞択を解陀しおからクリックするず、蚘録したマクロが実行される。

f:id:watto:20190721011902p:plain

 

ボタンの線集や削陀は、䞀旊ボタン䞊で右クリックするずボタンが遞択できるので、そうしおから行えばいい。

さらにC2ずG3の数匏を、

「=B2^2-3」「=F3^2-3」

「=B2^2-5」「=F3^2-5」

などず倉曎するず √3、√5 などの数倀が求たるので、理系人間は面癜がっおくれるんじゃないかな。

ずにかく気持ちいいほど収束スピヌドが速いのだ。理系人間だったら知っおるか、圓然。

 

ちなみにマクロ぀きExcelブックを保存したいずきには、「名前を付けお保存」ダむアログボックスの「ファむルの皮類(T):」から、「Excelマクロ有効ブック(*.xlsm)」を遞択する必芁がある。

f:id:watto:20190720140341p:plain

 

マクロ぀きExcelブックを開いたずきには「セキュリティの譊告」メッセヌゞが衚瀺される。

f:id:watto:20190721011932p:plain

マクロを有効にしたいずきには「コンテンツの有効化」をクリックすればいい。

 

なお「セキュリティの譊告」は、マクロりむルスマクロで曞かれたりむルスの被害を防ぐためのものなので、もし身に芚えのないファむルで「セキュリティの譊告」が衚瀺された堎合には、「コンテンツの有効化」をクリックしないで、ただちにファむルを削陀しりむルススキャンを実行しおください。

ご存知のこずずは思いたすが、念のため。

 

繰返しになりたすが、今回はあくたで序章で、本題に入るのは次回以降です。

www.watto.nagoya

远蚘

今回のシヌトの内容をCSVで保存しおみたした。

,x,f(x)=x^2-2,,数倀埮分䜜業゚リア,,,,
,10,=B2^2-2,,h,x+h,f(x+h),,
,,,,0.0001,=B2+E3,=F3^2-2,,
,,,,数倀埮分,,,,
,x1=x-f(x)/f'(x),,,f'(x)=(f(x+h)-f(x))/h,,,,
,=B2-C2/E6,,,=(G3-C2)/E3,,,,

䞊のデヌタをテキストファむルに保存し、拡匵子を「.csv」に倉曎しおExcelで開いおください。眫線や列幅などの情報は飛んでしたいたすが、数匏、数倀、文字デヌタの入力の手間は省略できるはずです。

スポンサヌリンク

Â