áá±á¬ááºážáá«ážááœáẠááá¯ážááá¯áž (ááœá²áá¬ážáá±á¬) áá¯ááºáá¯ááºááŸá¯áá»ááºážá áááºá¹áá»á¬áá®áá»áŸááŒááºážááᯠáá¯á¶ážááŒááºááẠáááºážáááºážáá»á¬ážá áœá¬ááᯠááœá±ážááœá±ážáá¬ážáááºá
á€áá±áá¬ááœáẠááœá±ážááœá±ážáá¬ážáá±á¬ áá®áá»áŸááŒááºážááŒá±ááŸááºážáááºážá¡á¬ážáá¯á¶ážááẠá¡áááá·áºáá¯á¶áž ááŸá áºáááºáááºážáááºážááᯠá¡ááŒá±áá¶áá¬ážáááºá áááºážáááºážáá»á¬ážááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž áá±á¬áºááŒááŒáá«á áá¯á·á
- ááá¯ááºááŒá±ááŸááºážáá»ááº
- Gradient á¡áááºáž
- Stochastic gradient áááºážáááºáááºá
áá»ááºážááŒá±á¬áá·áºááá®áá»áŸááŒááºážááá¯ááŒá±ááŸááºážáááºážáá áºáá¯á á®á¡ááœááºá áá±á¬ááºážáá«ážááẠá¡áá»áá¯ážáá»áá¯ážáá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáááºá á¡áááá¡á¬ážááŒáá·áº á á¬ááŒáá·áºááá¯ááºááá¯á¡áá¯á¶ážáááŒá¯áá² áá±ážáá¬ážáá¬ážááá·áºá¡áá¬áá»á¬ážááᯠááá¯ááºážááŒá¬ážáá¬ážáááºá numpy ááŸáá·áº ááœááºáá»ááºááŸá¯áá»á¬ážá¡ááœáẠá¡áá¯á¶ážááŒá¯áááºá numpy. áá»áœááºážáá»ááºá áœá¬ á¡áá¯á¶ážááŒá¯ááá¯ááºáááºáᯠáá¯á¶ááŒááºáááºá numpy ááœááºááŒá°áá¬áá¯ááºáá»á ááááºááᯠáá»áŸá±á¬á·áá»áá±ážáá«áááá·áºáááºá
áá±á¬ááºážáá«ážááœááºáá±ážáá¬ážáá±á¬áá¯ááºá¡á¬ážáá¯á¶ážááᯠáá¬áá¬á áá¬ážááŒáá·áº áá±ážáá¬ážáá¬ážáááºá python 2.7 á¡áá¯á¶ážááŒá¯ááŒááºáž áá»á°áá®áá¬ááŸááºá á¯á á¬á¡á¯ááº. ááá°áá¬áá±áá¬áá«ááá·áº á¡áááºážá¡ááŒá áºáá¯ááºááŸáá·áº ááá¯ááºááᯠááœááºáááºáá¬ážáááºá
áá±á¬ááºážáá«ážááẠá¥á¬ááºáááºáá¯-á ááºáááºáá°ááŸá¯ááœáẠá¡ááœááºáá»ááºááŒáá·áºáá±á¬ á¡ááá¯ááºážááᯠáá»áœááºážáá»ááºá áœá¬ á áááºáá±á·áá¬áá±áá°áá»á¬ážááŸáá·áº á áááºáá°ááŸá áºáŠážá áá¯á¶ážá¡ááœáẠááá¯ááá¯áááºááœááºáá«áááºá
áá á¹á ááºážááá¯ááá¯ááºáá±á¬áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºááá¯ážááŸááºážáá±á¬á¥ááá¬ááá¯á¡áá¯á¶ážááŒá¯áááºá
ááá°áá¬á¡ááŒá±á¡áá±áá»á¬áž
áá»áœááºá¯ááºááá¯á·ááœáẠááŸá®ááá¯á¡á¬ážáá¬ážááŸá¯ááᯠáá±á¬áºááŒáá±á¬ áááºááá¯ážáá«ážáá¯ááŸááááºá Y ÐŸÑ X (ááá¬ážáá¶áá«áẠ1):
ááá¬ážáá¶áá«áẠá âá¥ááᬠá¡ááŒá±á¡áá±áá»á¬ážâ

áááºááá¯ážáá¬ážááŸá¯ááœá± ááŸááá¬áááºá
áá
áºááŸá
áºáá¬ááááŒá
áºáááºá
- áá®ááááºááœá±á áá
áºáááºážááá¯ááá±á¬áº áááºááœá±ááẠáá
áºááŸá
áºáá¬á ááá±á«áºááœáẠáá°áááºáááºá
- áááºááœá±á¡áá±á«áº áá°áááºáá±á¬ áá
áºáá¯áááºážáá±á¬ ááá¹ááá¬á
á¥ááá¬á¡á¬ážááŒáá·áº - ááá¯á·ááŒá±á¬áá·áºá áá áºááŸá áºááááœááºáááºááœá±áá¡ááŒá±á¡áá±á¡áááŸá®ááá¯ááŸá¯áááŸá¯áá±á¬áá·áºááŸááŸá áºáá¯áá¯á¶ážááŸáá·áºáááºááá¯ážáá»á¬ážá¡áá±á¡ááœááºáááŸá¯áá±á¬áá·áºá០- áááºážááá¯á·áá²ááŸá¡ááœááºáááºážáá«ážáá«áááºá ááá¯á·áá±á¬áºá á€áá²á·ááá¯á·áá±á¬ááá¯ážááŸááºážááŸá¯ááẠá¡á ááŒá¯áá°áá»á¬áž áá±á¬ááŸá±á¬áá¬ážááá·áºá¡áá¬áá»á¬ážááᯠá¡ááŒá²áááºážááœááºáá°á áœá¬ááŸááºážááŒáááºá áááºážááá¯á·ááŒá±á¬ááá·áºá¡ááá¯ááºáž ááŒá áºááá¯ááºáá»á±ááŸááááºá ááá¯á·á¡ááŒáẠááááºážááááºážáá»á¬ážá ááá¯ážááŸááºážááŸá¯ááẠáááááá¬áᬠáá¯ááºá¡á¬ážá áááẠáááá¯á¡ááºáá² á á¬ááœááºáá±á«áºááœáẠááá°áá¬ááᯠááŒá±ááŸááºážááá¯áá°áá»á¬ážááᯠááœáá·áºááŒá¯áááºááŒá áºáááºá
á¥ááá¬ááœáẠáá±ážáá¬ážáá±á¬ ááŸá®ááá¯á¡á¬áž ááá¯ážááŸááºážáá±á¬ (ááœá²áá¬ážáá±á¬) áá¯ááºáá¯ááºááŸá¯áá»ááºážá áááºá¹áá»á¬áá®áá»áŸááŒááºážááŒáá·áº á¡áá®ážá ááºáá¯á¶áž ááá·áºááŸááºážááá¯ááºáááºáᯠáá°áááŒáá«á áá¯á·á

áááºááŸá¬
áááºááœá±áááŸáááá·áºáá
- áááŸáá·áºááá¯ááºáá®áá±á¬ áááºááœá±á
О
ááá·áºááŸááºážáá»ááºážá áá¯ááºáá¯ááºááŸá¯ááááºážááááºážáá»á¬ážá
ááááºážááááºážááᯠáááááŒá¯áá«á
ááá·áºááŸááºážáá»ááºážá slope ááá¯á·ááá¯áẠgradient áá¯áá±á«áºáá±á·ááŸááááºá á¡ááá¯áá«ááá¬áááá¯ááá¯ááºá
á¬ážááŒá¯áááºá
ááŒá±á¬ááºážáá²ááœá¬ážáá²á·á¡áá«
.
á¥ááá¬á¡á¬ážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááá¬áááºááŸá¬ áá®áá»áŸááŒááºážááœáẠááá¯ááá¯á·áá±á¬ááááºážáá»á¬ážááᯠááœá±ážáá»ááºáááºááŒá
áºáááºá
О
áá»áœááºá¯ááºááá¯á·á ááœááºáá»ááºáá¬ážáá±á¬ áááºááœá±áááºááá¯ážáá»á¬ážááᯠáá¡ááá¯áẠááœá±áááºá
á±áá±á¬ á¡ááŒá±ááŸááºáá»á¬ážááŸá i.e. ááá°áá¬ááœááºáááºááŒáá¬ážáá±á¬áááºááá¯ážáá»á¬ážáááºá¡áááºážáááºáá»áŸáá¬ááŸááááá·áºáááºá
á¡áááºážáá¯á¶áž á áá¯áááºážáá¯á¶áááºážáááºáž
á¡áááºážáá¯á¶áž á áá¯áááºážáááºážá¡áá ááœá±áááºááŸá¯ááᯠááŸá áºáááºááŒáá·áº ááœááºáá»ááºááá·áºáááºá á€áááºážááá¬ááẠáááºážááá¯á·ááœáẠááá·áºáá»ááºáááºááá¹ááá¬áá»á¬ážááŸááá±áá«á á¡ááŒááºá¡ááŸááºááœá±áááºááŸá¯áá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážááá¯ááºáááºááŒá áºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡áááºá ááá á¹á áá áºáá¯ááœááºá ááœá±áááºáááºá +5 (á¡áá±á«ááºážáá«áž) ááŸáá·áºá¡ááŒá¬áž -5 (á¡ááŸá¯ááºáá«áž) ááá¯á·áá±á¬áẠááœá±áááºááŸá¯ááá±á«ááºážáááºááẠáá áºáá¯ááŸáá·áºáá áºáᯠááŒááºááœá¬ážáááºááŒá áºááŒá®áž ááá¬áááŸá¬ 0 (áá¯á) ááŒá áºáááºá ááœá±áááºááŸá¯ááᯠááŸá áºáááºááá¯ááºáá² ááŒá áºááá¯ááºáááºá ááá¯á·áá±á¬áº modulus áááá¯ááºááá¯ááºááŸá¯ááá¯á¡áá¯á¶ážááŒá¯ááŒá®áž ááœá±áááºááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠá¡ááŒá¯ááá±á¬áá±á¬ááºááŒá®áž á á¯áá¯á¶áá¬áááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá€á¡áá»ááºááᯠá¡áá±ážá áááºáá±á¬áºááŒáááºááá¯ááºáá±á¬áºáááºáž ááœááºáá»ááºááŸá¯á¡áááºááŒá±á á±áááºá¡ááœáẠááœá±áááºááᯠááŸá áºáááºááẠáá¯á¶ážá á¶á¡ááá¯ááºáž ááœáŸááºááŒáá«áááºá
á€áááºááŸá¬ ááŸá áºáááºááœá±áááºááŸá¯ á¡áááºážáá¯á¶áž áá±á«ááºážááẠ(á¡ááŸá¬ážá¡ááœááºážáá»á¬áž) ááᯠáá¯á¶ážááŒááºááá·áº áá±á¬áºááŒá°áá¬áá¯á¶ááá¹áá¬áẠááŒá áºáááº-

áááºááŸá¬
á¡ááŒá±ááŸááºáá»á¬ážá á¡áá®ážá
ááºáá¯á¶ážáá¯ááºáá±á¬ááºáá»áẠ(ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááœááºáá»ááºáá¬ážáá±á¬ áááºááœá±)á
á¡ááŒá±ááŸááºáá»á¬ážááŒá
áºááŒááẠ(ááá°áá¬ááœááºáá±á¬áºááŒáá¬ážáá±á¬ áááºááœá±áá»á¬áž)á
ááá°áá¬á¡ááœáŸááºážááááºáž (ááœá±áááºáá¯á¶ážááŒááºááá·áºáá áá¶áá«ááº)
áá¯ááºáá±á¬ááºáá»ááºááᯠááœá²ááŒá¬ážááŒáá·áºáá¡á±á¬ááºá áá áºá áááºáá áºááá¯ááºážááœá²ááŒá¬ážáá±á¬ áá®áá»áŸááŒááºážáá»á¬ážááᯠáááºááŸááºááŒá®áž ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááŒá±ááŸááºážáá»ááºááá¯á· áááºááœá¬ážááẠá¡áááºááá·áºááŒá áºáá«á á±á ááá¯á·áá±á¬áº áŠážá áœá¬á ááœá²ááŒá¬ážááŒááºážá¡ááŒá±á¬ááºáž á¡ááá¯áá»á¯á¶ážáá±á·áá¬ááŒá®áž áááºážáááºáá¬ááŒááºážá áá»á®á©áá±ááŒá®á¡áááá¹áá«ááºááᯠááááááŒáá«á áá¯á·á
ááœá²ááŒá¬ážááŒááºážá
Differentiation ááẠfunction áá áºáá¯á áááºážáááºáá¬ááŸá¯ááᯠááŸá¬ááœá±ááŒááºážá áá¯ááºáá±á¬ááºááŸá¯ááŒá áºáááºá
áááºážáááºáá¬ááŒááºážááᯠáá¬á¡ááœááºá¡áá¯á¶ážááŒá¯ááááºážá áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯á áááºážáááºáá¬ááŸá¯ááẠáá¯ááºáá±á¬ááºáá»ááºá ááŒá±á¬ááºážáá²ááŸá¯ááŸá¯ááºážááᯠáá±á¬áºááŒááŒá®áž áááºážá áŠážáááºáá»ááºááᯠáá»áœááºá¯ááºááá¯á·á¡á¬áž ááŒá±á¬ááŒáááºá áááºááŸááºáá¬ážáá±á¬á¡ááŸááºááœáẠáááºážáááºáá¬áá«á á¡ááŒá¯ááá±á¬áá±á¬ááºáá«á áá¯ááºáá±á¬ááºáá»áẠááá¯ážáá¬ááẠááá¯ááºáá«á áá¯ááºáá±á¬ááºáá»áẠáá»á±á¬á·áááºážááœá¬ážáááºááŒá áºáááºá á¡ááŒáœááºážáá²á· áááºážáááºááŸá¯áááºááá¯áž ááŒá®ážáá±áá±á áá¯ááºáá±á¬ááºáá»ááºáááºááá¯ážáá»á¬áž á ááŒá±á¬ááºážáá²ááŸá¯ááŸá¯ááºáž ááŒáá·áºáá¬ážáá± ááŒá áºáááᯠfunction ááááºá áá»áŸá±á¬á á±á¬ááºáááºáž áááºá á±á¬ááºáá± ááŒá áºáááºá
á¥ááá¬á¡á¬ážááŒáá·áºá Cartesian ááŒáá®ááááºá
áá
áºá á¡ááŒá±á¡áá±áá»á¬ážá¡á±á¬ááºááœááºá á¡ááŸáẠM(0,0) á០áááºážáááºáá¬áá±á¬áááºááá¯ážááẠáá®áá»áŸáááºá 25 + ááá¯ááá¯áááºááŸá¬ áááºááŸááºá¡ááŸááºááœáẠáááºááá¯ážááŒá±á¬ááºážááœá¬ážáá±á¬á¡áá«á
ááá¬ážááá¯ážáá»áá°áá
áºáá
áºáá¯ááŒáá·áº áá¬áááºááá¯á·á áááºááá¯áž
ááá¬ážááá¯ážáá»áá°áá
Ạ25 ááá¯ážáá¬áááºá ááááºáá±á«áºááœáẠáááºááá¯ážáá»á¬áž áááááá¬áᬠááŒáá·áºáááºáá¬áá¯á¶ááááºá
áá±ážáá¬ážááá·áºá¡áá»ááºááŸ
áá±á¬ááºá¥ááá¬á áááºážáááºáá¬áááºááá¯ážááẠáá®áá»áŸáááºá -0,1 ááá¯ááá¯áááºááŸá¬ ááœáŸá±á·ááŒá±á¬ááºážááá·áºá¡áá«ááœáẠááŒá
áºáááºá
ááá¬ážááá¯ážáá» áá°áá
áºáá
áºáá¯á¡ááœáẠáááºááá¯áž
ááá¬ážááá¯ážáá» áá°áá
Ạ0,1 áᬠáá»á±á¬á·áá»ááœá¬ážáááºá áá
áºáá»áááºáááºážááŸá¬áááºá function áááááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááá¬áááºááŸá¬ážáá±á¬ á¡á±á¬ááºáááºááá¯á· áá»áŸá±á¬á
á±á¬ááºááᯠáááááŒá¯ááá¯ááºáááºá áá±á¬ááºááŒá®ážáá
áºáá¯ááŸáá·áº ááá¯ááºáá±á¬áºáá¯á¶ááœá²ááŒááºáž á áá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºáááºá
á±á¬ááºáá±á¬ áá±á¬ááºááœááºááá¯áááºáá²á·áááá·áº ááááºá¥ááá¬ááŸáá·áºááá°áá² áá±á¬ááºáá±á«áºá០ááŒááºážááŸááºážá
áœá¬ áá»áŸá±á¬áááºážáá¬áá¯á¶ááŸáá·áº áá°áá«ááẠ:)
ááá¯á·ááŒá±á¬áá·áº function ááá¯ááœá²ááŒá¬ážááŒá®ážáá±á¬ááº
á¡áá±ážáá¬ááŸá¯áá»á¬ážááŒáá·áº
О
áá»áœááºá¯ááºááá¯á·ááẠ1st á¡ááŸá¬á
á¬áá
áºá
áááºáá
áºááá¯ááºážááœá²ááŒá¬ážáá±á¬áá®áá»áŸááŒááºážáá»á¬ážááᯠáááºááŸááºáááºá áá®áá»áŸááŒááºážáá»á¬ážááᯠáá¯á¶ážááŒááºááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá®áá»áŸááŒááºážááŸá
áºáá¯á á
áá
áºáá
áºáá¯ááᯠáááºáá¶áááŸááááºááŒá
áºááŒá®ážá á¡ááá¯áá« coefficients áááá¯áá²á·ááá¯á·áá±á¬áááºááá¯ážáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·ááœá±ážáá»ááºááá¯ááºá
á±ááá·áº ááŒá±ááŸááºážááŒááºážááŒáá·áºá
О
áá±ážáá¬ážáá±á¬ á¡ááŸááºáá»á¬ážá០áááºááá¯ááºáᬠáááºážáááºáá¬ááŸá¯áá»á¬ážá áááºááá¯ážáá»á¬ážááẠá¡ááœááºáá±ážáááºáá±á¬ ááá¬áááŒáá·áº ááŒá±á¬ááºážáá²áᬠááœá²ááŒááºážá
áááºááŒá¬ááŒá±ááŸááºážáá»ááºáá
áºáá¯ááœáẠáá¯á¶ážááááŒá±á¬ááºážáá²áá«á áá
áºáááºážááá¯ááá±á¬áºá ááœá±á·ááŸááá±á¬ coefficients ááŸá¡ááŸá¬ážáá¯ááºáá±á¬ááºáá»ááºááẠá¡áááá·áºáá¯á¶ážááá¯á·áá±á¬ááºááŸááááºááŒá
áºááŒá®ážá á€á¡áá»ááºáá»á¬ážááœáẠáá
áºá
áááºáá
áºááá¯ááºáž áááºážáááºáá¬ááŸá¯áá»á¬ážááááºááá¯ážáá»á¬ážááẠáá¯áááŸáá·áº áá®áá»áŸáááºááŒá
áºááá·áºá¡ááœááºááŒá±á¬áá·áºááŒá
áºáááºá
ááá¯á·ááŒá±á¬áá·áº ááœá²ááŒá¬ážááŒááºážá á
ááºážáá»ááºážáá»á¬áž á¡áá ááááºážááááºážááŸáá·áº á
ááºáá»ááºážá áááá¡á
á®á¡á
á¥áºá áá
áºá
áááºáá
áºááá¯ááºáž áááºážáááºááŒááºážáá®áá»áŸááŒááºáž
áá¯á¶á
á¶áá°áá«áááº

1st order partial derivative equation ááŸáá·áº á
ááºáá»ááºážá
áá¯á¶á
á¶áá°áá«áááº

ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá»áŸáááá¯ážááŸááºážáá±á¬ ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááŒá±ááŸááºážáá»ááºáá«ááŸááá±á¬ áá®áá»áŸááŒááºážá áá áºáá áºáá¯ááᯠáááºáá¶áááŸááá²á·áááº-
á
áááº{áá®áá»áŸááŒááºáž*}
á
áááº{cases}
na + bsumlimits_{i=1}^nx_i â sumlimits_{i=1}^ny_i = 0
sumlimits_{i=1}^nx_i(a +bsumlimits_{i=1}^nx_i â sumlimits_{i=1}^ny_i) = 0
á¡áá¯á¶ážáááº{cases}
á¡áá¯á¶áž{áá®áá»áŸááŒááºáž*}
áá®áá»áŸááŒááºážá¡á¬áž áááŒá±ááŸááºážáá® ááŒáá¯áááºáááºááá¯ááºáá¡á±á¬ááºá áááºááŒááºážááŸááºáááºááŒá±á¬ááºáž á á áºáá±ážááŒá®áž áá±áá¬ááᯠáá±á¬áºáááºáá¯ááºááŒáá«á áá¯á·á
áá±áá¬ááᯠáááºááŒááºážááŸáá·áº áá±á¬áºáááºáá»ááŒááºážá
ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááŒá±ááŸááºážáá»ááºá¡ááœááºááŸáá·áº áá±á¬ááºááá¯ááºážááœáẠgradient ááŸáá·áº stochastic gradient áááºážáááºááŒááºážá¡ááœááºá áá¯ááºááᯠáá¯á¶á á¶ááŸá áºáá»áá¯ážááŒáá·áº á¡áá¯á¶ážááŒá¯áá«áááº- á á¬ááŒáá·áºááá¯ááºááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒá áºáááºá numpy áááºážááᯠá¡áá¯á¶ážáááŒá¯áá²á ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠááá·áºáá»á±á¬áºáá±á¬ áá±áá¬áá¯á¶á á¶áá»ááŒááºáž (áá¯ááºááá¯ááŒáá·áºáá«) ááá¯á¡ááºáá«áááºá
áá±áá¬ááœáá·áºááŒááºážááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážáá¯ááº
# ОЌпПÑÑОÑÑеЌ вÑе МÑжМÑе МаЌ бОблОПÑекО
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
import pylab as pl
import random
# гÑаÑОкО ПÑПбÑазОЌ в Jupyter
%matplotlib inline
# ÑкажеЌ ÑÐ°Ð·ÐŒÐµÑ Ð³ÑаÑОкПв
from pylab import rcParams
rcParams['figure.figsize'] = 12, 6
# ПÑклÑÑОЌ пÑеЎÑпÑÐµÐ¶ÐŽÐµÐœÐžÑ Anaconda
import warnings
warnings.simplefilter('ignore')
# загÑÑзОЌ зМаÑеМОÑ
table_zero = pd.read_csv('data_example.txt', header=0, sep='t')
# пПÑЌПÑÑОЌ ОМÑПÑЌаÑÐžÑ ÐŸ ÑаблОÑе О Ма ÑÐ°ÐŒÑ ÑаблОÑÑ
print table_zero.info()
print '********************************************'
print table_zero
print '********************************************'
# пПЎгПÑПвОЌ ЎаММÑе без ОÑпПлÑÐ·ÐŸÐ²Ð°ÐœÐžÑ NumPy
x_us = []
[x_us.append(float(i)) for i in table_zero['x']]
print x_us
print type(x_us)
print '********************************************'
y_us = []
[y_us.append(float(i)) for i in table_zero['y']]
print y_us
print type(y_us)
print '********************************************'
# пПЎгПÑПвОЌ ЎаММÑе Ñ ÐžÑпПлÑзПваМОеЌ NumPy
x_np = table_zero[['x']].values
print x_np
print type(x_np)
print x_np.shape
print '********************************************'
y_np = table_zero[['y']].values
print y_np
print type(y_np)
print y_np.shape
print '********************************************'ááŒááºááœááºáž
ááá¯á áá»áœááºá¯ááºááá¯á·ááẠááááŠážá áœá¬ áá±áá¬ááᯠáááºááŒá®ážáááºááŸáá·áº áá¯áááá¡áá»ááºááŸá¬ áááºááŒááºážá ááŸááºáááºááŸá¯ááᯠá á áºáá±ážááŒá®áž áá±á¬ááºáá¯á¶ážááœáẠáá±áá¬ááᯠáá±á¬áºáááºáá»ááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠááááá¯á¶áž á áááºáá°ážáá¯á¶áá±á¬áºááŸá¯ááᯠáá¯ááºáá±á¬ááºáá«áááºá áá®á¡ááœáẠáááŒá¬áááá¯á¶ážáá²á· áááºážáááºážááá±á¬á· ááœá²ááœáẠá á¬ááŒáá·áºááá¯ááºáá»á¬áž áááºáááºáááºáááº. áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœááºá á¡áá±á¡ááœááºá¡ááá·áºá¡áááºááŒá±á¬áá·áºá á á¬ááŒáá·áºááá¯ááºááá¯á¡áá¯á¶ážááŒá¯áááºá¡áá»ááºáááŸááá«á áááºáááºáááºáááº. áá¯á¶ááŸááºá á¬ááŒáá·áºááá¯ááºááᯠá¡áá¯á¶ážááŒá¯áá«áááºá matplotlib á¡ááá¯ááºážá¡á ááᯠááŒáá·áºáá¯á¶áá«áá²á
Scatterplot áá¯ááº
print 'ÐÑаÑОк â1 "ÐавОÑОЌПÑÑÑ Ð²ÑÑÑÑкО ÐŸÑ ÐŒÐµÑÑÑа гПЎа"'
plt.plot(x_us,y_us,'o',color='green',markersize=16)
plt.xlabel('$Months$', size=16)
plt.ylabel('$Sales$', size=16)
plt.show()ááá¬ážáá¶áá«áẠ1 "áá áºááŸá áºáá¬áááá±á«áºáááºááœá±á¡áá±á«áº áá°áááºáááº"

ááá¯ááºááŒá±ááŸááºážáá»ááº
á¡áá¯á¶ážá¡áá»á¬ážáá¯á¶áž tools ááœá±ááá¯áá¯á¶ážááŒáá·áºáá¡á±á¬áẠPython ááŸááºá· áá®áá»áŸááŒááºážá áá áºá¡á¬áž ááŒá±ááŸááºážáá«á
á
áááº{áá®áá»áŸááŒááºáž*}
á
áááº{cases}
na + bsumlimits_{i=1}^nx_i â sumlimits_{i=1}^ny_i = 0
sumlimits_{i=1}^nx_i(a +bsumlimits_{i=1}^nx_i â sumlimits_{i=1}^ny_i) = 0
á¡áá¯á¶ážáááº{cases}
á¡áá¯á¶áž{áá®áá»áŸááŒááºáž*}
Cramer áá
ááºážáá»ááºážá¡á áá±áá°áá» á¡áá¯á¶ážá¡ááŒáẠááŸáá·áº á¡áá¯á¶ážá¡ááŒáẠáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· ááœá±á·ááŸááá«áááºá
ááŸáá·áº
ááá¯á·áá±á¬áẠáááºááŸááºááááºážááᯠááá¯ááºážááŒá¬ážáááºá
áá±áá°áá»áááºááŸááºááááºážááá¯á· - ááááºážááááºážááᯠááŸá¬áá«á
á¡áá¬ážáá° ááááºážááááºážááᯠáá»áœááºá¯ááºááá¯á· ááŸá¬ááœá±áááºá
.
ááá¯ááºááœá²á¡ááŒá±áá¯ááº
# ПпÑеЎелОЌ ÑÑМкÑÐžÑ ÐŽÐ»Ñ ÑаÑÑеÑа кПÑÑÑОÑОеМÑПв a О b пП пÑÐ°Ð²ÐžÐ»Ñ ÐÑаЌеÑа
def Kramer_method (x,y):
# ÑÑЌЌа зМаÑеМОй (вÑе ЌеÑÑÑа)
sx = sum(x)
# ÑÑЌЌа ОÑÑОММÑÑ
ПÑвеÑПв (вÑÑÑÑка за веÑÑ Ð¿ÐµÑОПЎ)
sy = sum(y)
# ÑÑЌЌа пÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÑ Ð·ÐœÐ°ÑеМОй Ма ОÑÑОММÑе ПÑвеÑÑ
list_xy = []
[list_xy.append(x[i]*y[i]) for i in range(len(x))]
sxy = sum(list_xy)
# ÑÑЌЌа кваЎÑаÑПв зМаÑеМОй
list_x_sq = []
[list_x_sq.append(x[i]**2) for i in range(len(x))]
sx_sq = sum(list_x_sq)
# кПлОÑеÑÑвП зМаÑеМОй
n = len(x)
# ПбÑОй ПпÑеЎелОÑелÑ
det = sx_sq*n - sx*sx
# ПпÑеЎелОÑÐµÐ»Ñ Ð¿ÐŸ a
det_a = sx_sq*sy - sx*sxy
# ОÑкПЌÑй паÑаЌеÑÑ a
a = (det_a / det)
# ПпÑеЎелОÑÐµÐ»Ñ Ð¿ÐŸ b
det_b = sxy*n - sy*sx
# ОÑкПЌÑй паÑаЌеÑÑ b
b = (det_b / det)
# кПМÑÑПлÑМÑе зМаÑÐµÐœÐžÑ (пÑППвеÑка)
check1 = (n*b + a*sx - sy)
check2 = (b*sx + a*sx_sq - sxy)
return [round(a,4), round(b,4)]
# запÑÑÑОЌ ÑÑМкÑÐžÑ Ðž запОÑеЌ пÑавОлÑМÑе ПÑвеÑÑ
ab_us = Kramer_method(x_us,y_us)
a_us = ab_us[0]
b_us = ab_us[1]
print ' 33[1m' + ' 33[4m' + "ÐпÑОЌалÑМÑе зМаÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв a О b:" + ' 33[0m'
print 'a =', a_us
print 'b =', b_us
print
# ПпÑеЎелОЌ ÑÑМкÑÐžÑ ÐŽÐ»Ñ Ð¿ÐŸÐŽÑÑеÑа ÑÑÐŒÐŒÑ ÐºÐ²Ð°ÐŽÑаÑПв ПÑОбПк
def errors_sq_Kramer_method(answers,x,y):
list_errors_sq = []
for i in range(len(x)):
err = (answers[0] + answers[1]*x[i] - y[i])**2
list_errors_sq.append(err)
return sum(list_errors_sq)
# запÑÑÑОЌ ÑÑМкÑÐžÑ Ðž запОÑеЌ зМаÑеМОе ПÑОбкО
error_sq = errors_sq_Kramer_method(ab_us,x_us,y_us)
print ' 33[1m' + ' 33[4m' + "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй" + ' 33[0m'
print error_sq
print
# заЌеÑОЌ вÑÐµÐŒÑ ÑаÑÑеÑа
# print ' 33[1m' + ' 33[4m' + "ÐÑÐµÐŒÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÑаÑÑеÑа ÑÑÐŒÐŒÑ ÐºÐ²Ð°ÐŽÑаÑПв ПÑклПМеМОй:" + ' 33[0m'
# % timeit error_sq = errors_sq_Kramer_method(ab,x_us,y_us)á€áááºááŸá¬ áá»áœááºá¯ááºááá¯á·áááŸááá±á¬á¡áá¬ááŒá áºáááº-

ááá¯á·ááŒá±á¬áá·áº áá±á¬áºááááºážáá»á¬ážá áááºááá¯ážáá»á¬ážááᯠááœá±á·ááŸáááŒá®áž ááŸá
áºáááºááœá±áááºááŸá¯áá»á¬ážá áá±á«ááºážáááºááᯠáá°áá±á¬ááºáá¬ážáááºá ááœá±á·ááŸááá±á¬ coefficients áá»á¬ážááŸáá·áºá¡áá® scattering histogram áá±á«áºááœáẠáá»ááºážááŒá±á¬áá·áºáá
áºáá¯ááœá²ááŒáá«á
áá¯á·á
áá¯ááºáá¯ááºááŸá¯áá»ááºážáá¯ááº
# ПпÑеЎелОЌ ÑÑМкÑÐžÑ ÐŽÐ»Ñ ÑПÑЌОÑÐŸÐ²Ð°ÐœÐžÑ ÐŒÐ°ÑÑОва ÑаÑÑÑеÑМÑÑ
зМаÑеМОй вÑÑÑÑкО
def sales_count(ab,x,y):
line_answers = []
[line_answers.append(ab[0]+ab[1]*x[i]) for i in range(len(x))]
return line_answers
# пПÑÑÑПОЌ гÑаÑОкО
print 'ÐÑÑОкâ2 "ÐÑавОлÑМÑе О ÑаÑÑеÑМÑе ПÑвеÑÑ"'
plt.plot(x_us,y_us,'o',color='green',markersize=16, label = '$True$ $answers$')
plt.plot(x_us, sales_count(ab_us,x_us,y_us), color='red',lw=4,
label='$Function: a + bx,$ $where$ $a='+str(round(ab_us[0],2))+',$ $b='+str(round(ab_us[1],2))+'$')
plt.xlabel('$Months$', size=16)
plt.ylabel('$Sales$', size=16)
plt.legend(loc=1, prop={'size': 16})
plt.show()ááá¬ážáá¶áá«áẠ2 "ááŸááºáááºáá±á¬ ááœááºáá»ááºáá¬ážáá±á¬ á¡ááŒá±áá»á¬áž"

áááá¯ááºážá¡ááœáẠááœá±áááºáá±á¬ááááºááᯠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážáá¶á០áááá¬áááºááŸá¬ážáá±á¬áááºááœá±á·áá»áá±á¬áááºááá¯ážááᯠááá°áááºááá¯ááºáá±á¬áºáááºážá ááá¯ážááŸááºážáá±á¬áá»ááºážááŒá±á¬ááºážáá¯ááºáá¯ááºááŸá¯áá®áá»áŸááŒááºážááẠáá
áºááŸá
áºáá
áºáááááºááœá±á¡áá±á«áº ááŸá®ááá¯ááŸá¯á¡á¬áž áááºáá»áŸáá±á¬ááºážááœááºááŒá±á¬ááºáž áááá»ááºá
áááºááᯠáá»á±áááºá
á±áááºá
ááœá±áááºáá±á¬ááá¬ážáá¯ááº
# ПпÑеЎелОЌ ÑÑМкÑÐžÑ ÐŽÐ»Ñ ÑПÑЌОÑÐŸÐ²Ð°ÐœÐžÑ ÐŒÐ°ÑÑОва ПÑклПМеМОй в пÑПÑеМÑаÑ
def error_per_month(ab,x,y):
sales_c = sales_count(ab,x,y)
errors_percent = []
for i in range(len(x)):
errors_percent.append(100*(sales_c[i]-y[i])/y[i])
return errors_percent
# пПÑÑÑПОЌ гÑаÑОк
print 'ÐÑаÑОкâ3 "ÐÑÐºÐ»ÐŸÐœÐµÐœÐžÑ Ð¿ÐŸ-ЌеÑÑÑМП, %"'
plt.gca().bar(x_us, error_per_month(ab_us,x_us,y_us), color='brown')
plt.xlabel('Months', size=16)
plt.ylabel('Calculation error, %', size=16)
plt.show()ááá¬ážáá¶áá«áẠ3 "ááœá±áááºááŸá¯áá»á¬ážá %"

ááŒá®ážááŒáá·áºá
á¯á¶ááŒááºážáááŸááá±á¬áºáááºáž áá»áœááºá¯ááºááá¯á·ááá¬áááºááᯠááŒá®ážááŒá±á¬ááºáá²á·áááºá
coefficients ááá¯áá¯á¶ážááŒááºááẠfunction ááá¯áá±ážááŒáá«á
áá¯á·
О
á
á¬ááŒáá·áºááá¯ááºááᯠá¡áá¯á¶ážááŒá¯ numpyááá¯ááá¯áááá»á
áœá¬á áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá±á¬ááºáá»ááºááŸá
áºáá¯ááᯠáá±ážáá¬ážáá«áááº- áá
áºáá¯ááŸá¬ pseudoinverse matrix ááá¯á¡áá¯á¶ážááŒá¯ááŒááºáž (áá¯ááºáááºážá
ááºááẠááœááºáá»ááºááŸá¯á¡á ááŸá¯ááºááœá±ážááŒá®áž ááááºáááŒáááºááŒá
áºáá±áá±á¬ááŒá±á¬áá·áº áááºááœá±á·ááœáẠááá±á¬ááºáá¶áá«)á áá±á¬ááºáá
áºáá¯ááẠmatrix equation ááá¯á¡áá¯á¶ážááŒá¯áá¬ážáááºá
ááœá²ááŒááºážá áááºááŒá¬ááŒá±ááŸááºážáá»ááºáá¯áẠ(NumPy)
# ÐŽÐ»Ñ ÐœÐ°Ñала ЎПбавОЌ ÑÑÐŸÐ»Ð±ÐµÑ Ñ ÐœÐµ ОзЌеМÑÑÑОЌÑÑ Ð·ÐœÐ°ÑеМОеЌ в 1.
# ÐаММÑй ÑÑÐŸÐ»Ð±ÐµÑ ÐœÑжеМ ÐŽÐ»Ñ ÑПгП, ÑÑÐŸÐ±Ñ ÐœÐµ ПбÑабаÑÑваÑÑ ÐŸÑЎелÑМП кПÑÑÑОÑÐµÐœÑ a
vector_1 = np.ones((x_np.shape[0],1))
x_np = table_zero[['x']].values # Ма вÑÑкОй ÑлÑÑай пÑОвеЎеЌ в пеÑвОÑМÑй ÑПÑÐŒÐ°Ñ Ð²ÐµÐºÑÐŸÑ x_np
x_np = np.hstack((vector_1,x_np))
# пÑПвеÑОЌ ÑП, ÑÑП вÑе ÑЎелалО пÑавОлÑМП
print vector_1[0:3]
print x_np[0:3]
print '***************************************'
print
# МапОÑеЌ ÑÑМкÑОÑ, кПÑПÑÐ°Ñ ÐŸÐ¿ÑеЎелÑÐµÑ Ð·ÐœÐ°ÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв a О b Ñ ÐžÑпПлÑзПваМОеЌ пÑевЎППбÑаÑМПй ЌаÑÑОÑÑ
def pseudoinverse_matrix(X, y):
# заЎаеЌ ÑвМÑй ÑПÑÐŒÐ°Ñ ÐŒÐ°ÑÑОÑÑ Ð¿ÑОзМакПв
X = np.matrix(X)
# ПпÑеЎелÑеЌ ÑÑаМÑпПМОÑПваММÑÑ ÐŒÐ°ÑÑОÑÑ
XT = X.T
# ПпÑеЎелÑеЌ кваЎÑаÑМÑÑ ÐŒÐ°ÑÑОÑÑ
XTX = XT*X
# ПпÑеЎелÑеЌ пÑевЎППбÑаÑМÑÑ ÐŒÐ°ÑÑОÑÑ
inv = np.linalg.pinv(XTX)
# заЎаеЌ ÑвМÑй ÑПÑÐŒÐ°Ñ ÐŒÐ°ÑÑОÑÑ ÐŸÑвеÑПв
y = np.matrix(y)
# МаÑ
ПЎОЌ векÑÐŸÑ Ð²ÐµÑПв
return (inv*XT)*y
# запÑÑÑОЌ ÑÑМкÑОÑ
ab_np = pseudoinverse_matrix(x_np, y_np)
print ab_np
print '***************************************'
print
# МапОÑеЌ ÑÑМкÑОÑ, кПÑПÑÐ°Ñ ÐžÑпПлÑзÑÐµÑ ÐŽÐ»Ñ ÑеÑÐµÐœÐžÑ ÐŒÐ°ÑÑОÑМПе ÑÑавМеМОе
def matrix_equation(X,y):
a = np.dot(X.T, X)
b = np.dot(X.T, y)
return np.linalg.solve(a, b)
# запÑÑÑОЌ ÑÑМкÑОÑ
ab_np = matrix_equation(x_np,y_np)
print ab_npCoefficients ááá¯áá¯á¶ážááŒááºáá¬ááœááºá¡áá¯á¶ážááŒá¯ááá·áºá¡áá»áááºááᯠááŸáá¯ááºážááŸááºááŒáá·áºááŒáá«á
áá¯á·
О
áááºááŒáá¯á¶áááºážáááºáž á áá¯ááŸáá·áºá¡áá®á
ááœááºáá»ááºáá»áááºááœááºáááºáá¯ááº
print ' 33[1m' + ' 33[4m' + "ÐÑÐµÐŒÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÑаÑÑеÑа кПÑÑÑОÑОеМÑПв без ОÑпПлÑÐ·ÐŸÐ²Ð°ÐœÐžÑ Ð±ÐžÐ±Ð»ÐžÐŸÑекО NumPy:" + ' 33[0m'
% timeit ab_us = Kramer_method(x_us,y_us)
print '***************************************'
print
print ' 33[1m' + ' 33[4m' + "ÐÑÐµÐŒÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÑаÑÑеÑа кПÑÑÑОÑОеМÑПв Ñ ÐžÑпПлÑзПваМОеЌ пÑевЎППбÑаÑМПй ЌаÑÑОÑÑ:" + ' 33[0m'
%timeit ab_np = pseudoinverse_matrix(x_np, y_np)
print '***************************************'
print
print ' 33[1m' + ' 33[4m' + "ÐÑÐµÐŒÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÑаÑÑеÑа кПÑÑÑОÑОеМÑПв Ñ ÐžÑпПлÑзПваМОеЌ ЌаÑÑОÑМПгП ÑÑавМеМОÑ:" + ' 33[0m'
%timeit ab_np = matrix_equation(x_np, y_np)
áá±áá¬ááá¬áá¡áááºážáááºááŒáá·áºá Cramer ááááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á ááááºážááááºážáá»á¬ážááᯠááŸá¬ááœá±áá±ážááá·áº "ááá¯ááºááá¯ááºáá±ážáá¬ážáá±á¬" áá¯ááºáá±á¬ááºáá»ááºááẠááŸá±á·ááœááºááœááºáá±á«áºáá¬áááºá
ááᯠáááºááẠááááºážááááºážáá»á¬ážááᯠááŸá¬ááœá±ááẠá¡ááŒá¬ážáááºážáááºážáá»á¬ážááá¯á· áááºááœá¬ážááá¯ááºáááºá
О
.
Gradient á¡áááºáž
ááááŠážá áœá¬á gradient ááá¯áááºááŸá¬ áááºáááºááᯠáááºááŸááºááŒáá«á áá¯á·á ááá¯ážááá¯ážááŸááºážááŸááºážááŒá±á¬ááá»áŸáẠgradient ááẠfunction áá áºáá¯á á¡ááŒáá·áºáá¯á¶ážááá¯ážáááºááŸá¯ááá¯ááœáŸááºááŒááá·áº á¡ááá¯ááºážáá áºáá¯ááŒá áºáááºá áá±á¬ááºáá±á«áºáááºááŒááºážááŸáá·áº ááŸáá¯ááºážááŸá¥áºá áá»ááºážá á±á¬ááºážáá»ááºááŸá¬á á¬ááẠáá±á¬ááºááááºááá¯á· áááºá á±á¬ááºáá¯á¶ážáááºááá·áºáá±áá¬ááŒá áºáááºá áá±á¬ááºááŸáá·áº ááá°áá¬ááᯠááŒá¯á á¯áá»áá¯ážáá±á¬ááºáá¬ááœáẠá¡ááŸááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠááŒá±áááá·áºááá¯ááºážááá¯á· á¡ááŒááºáá¯á¶ážáá±á¬ááºááŸáááẠáááºá á±á¬ááºáá±á¬ áááºážáááºááẠááá¯á¡ááºááŒá±á¬ááºážá ááá¯ááá¯áááºááŸá¬ á¡áááá·áºáá¯á¶áž - áá¯ááºáá±á¬ááºááŸá¯ á¡ááá¯ážá¡áá»áŸá±á¬á· ááá¯ááºááá¯ááºáá±á¬ áá±áá¬ááŒá áºáááºá á€á¡áá»áááºááœáẠáááºážáááºáá¬ááŸá¯ááẠáá¯áááŸáá·áº áá®áá»áŸáááá·áºáááºá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠgradient áááá¯á¡ááºáá±á¬áºáááºáž antigradient áá áºáá¯ááŒá áºáááºá Antigradient ááá¯ááŸá¬ááẠgradient ááᯠááŒáŸá±á¬ááºáááºáá¬ááá¯áááºá -1 (á¡áá¯ááºáá áºáá¯)á
áá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯ááœáẠminima áá»á¬ážá
áœá¬ááŸáááá¯ááºáááºáá°áá±á¬á¡áá»ááºááᯠá¡á¬áá¯á¶á
áá¯ááºááŒáá·áºááŒá
áá¯á·á á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬ á¡ááá¯ááŒá¯áá¬ážáá±á¬ algorithm ááá¯á¡áá¯á¶ážááŒá¯ááŒá®áž áááºážááá¯á·á¡áááºááŸáá
áºáá¯ááá¯á· áááºážááœá¬ážáá«áá ááœá±á·ááŸááá¬ážááá·áºáááºáááá·áºááá¯ááºááá·áº á¡ááŒá¬ážáááá·áºáá¯á¶ážáá
áºáá¯ááᯠááŸá¬ááœá±á·ááá¯ááºáááºááá¯ááºáá«á á
áááºáá»áŸá±á¬á·ááá¯ááºáá¡á±á¬ááºá áá«á áá«ááá¯á·á¡ááœáẠááŒáááºážááŒá±á¬ááºááŸá¯ááá¯ááºáá°áž! áá»áœááºá¯ááºááá¯á·áááá
á¹á
ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááá¯ááºáá±á¬ááºááŸá¯ááŸá
á á¡áááºážáá¯á¶ážáá
áºáá¯áááºážááŒáá·áº ááá¯ááºááœááºááŒá±ááŸááºážáá±áá«áááºá
ááááºáá±á«áºááœáẠáá¯á¶ááŸáẠparabola áá
áºáá¯ááŒá
áºáááºá áá»áœááºá¯ááºááá¯á·ááá»á±á¬ááºážáááºá¹áá»á¬áááºáááºážá០áá»áœááºá¯ááºááá¯á·á¡á¬ážáá¯á¶áž áá±á¬ááºážá
áœá¬áááá¬ážááá·áºááá·áºá¡ááá¯ááºáž parabola ááœáẠá¡áááá·áºáá¯á¶ážáá
áºáá¯áá¬ááŸááááºá
gradient ááᯠáá¬á·ááŒá±á¬áá·áº ááá¯á¡ááºááá² ááá¯áᬠááááŸáááŒá®ážáá±á¬ááºá gradient ááẠsegment áá
áºáᯠááŒá
áºáááºá ááá¯ááá¯áááºááŸá¬ áá±ážáá¬ážáá±á¬ coordinates ááŸááá±á¬ vector áá
áºáᯠááŒá
áºááŒá®ážá á¡ááá¡áá» áá°áá®áá±á¬ coefficients ááŒá
áºááá·áº
О
áá»áœááºá¯ááºááá¯á·ááẠgradient áááºážáááºááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáááºá
áá áááºáá®á áááºážáááºááá·áº á¡ááºáááá¯áá®áááºááŸáá·áºáááºáááºááá·áº á á¬ááŒá±á¬ááºážá¡áááºážáááºááá¯áᬠáááºááẠá¡ááŒá¶ááŒá¯ááá¯áááº-
- áá»áœááºá¯ááºááá¯á·ááẠcoefficients áááŒááááááºáá»á¬ážááᯠpseudo-random áá¯á¶á
á¶ááŒáá·áº áá¯á¶ážááŒááºáááºá
О
. áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœááºá áá¯áááŸáá·áºáá®ážáá±á¬ ááááºážáá»á¬ážááᯠáááºááŸááºáá«áááºá á€áááºááŸá¬ áá¬áááºá¡áá±á·á¡áá»áá·áºáá
áºáá¯ááŒá
áºáá±á¬áºáááºáž ááá
á¹á
áá
áºáá¯á
á®ááœáẠáááºážáááá¯ááºááá¯ááºá¡áá±á·á¡áá»áá·áºááŸáááá¯ááºáááºá - ááŒááááááºááŸ
á¡ááŸááºááœáẠ1st order partial derivative ááááºááá¯ážááᯠáá¯ááºáá«á
. áá®áá±á¬á· derivative á positive ááá¯ááẠfunction á ááá¯ážáá¬áá«áááºá ááá¯á·ááŒá±á¬áá·áºá áááºážáááºááŒááºážááááºááá¯ážááᯠáá¯ááºááŒááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠááŒá®ážááœá¬ážááŸá¯á ááá·áºáá»ááºáááºáŠážáááºáá»ááºááŒá
áºáá±á¬ áááºážáááºáá¬áááºážááŒá±á¬ááºážááá¯á· ááœá±á·ááœá¬ážáá«áááºá derivative ááẠnegative ááŒá
áºáá±áá«áá á€á¡ááŸááºááœáẠfunction ááẠáá»áááºážááœá¬ážááŒá®áž derivative ááááºááá¯ážááᯠáá¯ááºááŒááºážááŒáá·áº áááºážáááºááŒááºážáá®ááá¯á· áŠážáááºááœá¬ážáá«áááºá - áá»áœááºá¯ááºááá¯á·ááẠááŒáá®ááááºááŒáá·áº á¡áá¬ážáá°áá¯ááºáá±á¬ááºááŸá¯ááᯠáá¯ááºáá±á¬ááºáá«áááºá
: á¡ááŸááºááœáẠáá
áºá
áááºáá
áºááá¯ááºáž áááºážáááºááŒááºážá áááºááá¯ážááᯠáá¯ááºáá«á
. - á¡áááá·áºáá¯á¶ážááá¯áá¯ááºáá»á±á¬áºááŒá®áž áááºááŸáá¯ááºážáá±á¬á¡á¬áá¬ááá²ááá¯á· áá»á¶áááºážááŒááºážáááŒá¯áááºá áááºážáááºáá¬áááºážááŒá±á¬ááºážááœáẠááŒá±ááŸááºážá¡ááœááºá¡á á¬ážááᯠáááºááŸááºááẠááá¯á¡ááºáááºá áá±áá¯áá»á¡á¬ážááŒáá·áºá áááºááẠááŒá±ááŸááºážááᯠááŸááºáááºá áœá¬ áááºááŸááºáááºážááŸáá·áº ááœááºáá»ááºááŸá¯ááá¯ááºáᬠáá¯ááºáá»á ááááºáá»á¬ážááᯠáá»áŸá±á¬á·áá»áááºá¡ááœáẠáááºážáááºááá·áº áá¯ááºáááºážá ááºá¡ááœááºáž áááºážááᯠáááºááá¯á·ááŒá±á¬ááºážáá²ááááºá¡ááŒá±á¬ááºáž áá±á¬ááºážáá«ážáá áºáá¯áá¯á¶ážááᯠáá±ážáá¬ážááá¯ááºáááºá ááá¯á·áá±á¬áº ááá¯áá»áœááºá¯ááºááá¯á·ááŸá±á·ááœáẠá¡áááºážáááºááœá²ááŒá¬ážáá±á¬á¡áá¯ááºáá áºáá¯ááŸááá«áááºá áá»áœááºá¯ááºááá¯á·ááẠâpokeâ á áááá¹áá¶áááºážáá»áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á ááá¯á·ááá¯áẠáá°áá®áá±á¬á áá¬ážáá¯á¶ááœáẠáááºááœá±á·áá»áá»ááŒá±á¬áá¬ážááá·áºá¡ááá¯ááºáž ááŒá±ááŸááºážá¡ááœááºá¡á á¬ážááᯠáááºáá±á¬ááºáá«áááºá
- ááŒá®ážáá¬áá²á· áá«ááá¯á·áá±ážáá¬ážáá²á· ááŒááááááºááœá±ááá±
О
ááááááºááá¹ááá¬áá»á¬ážá áááºááá¯ážáá»á¬ážááᯠáá¯ááºáá«á áá»áœááºá¯ááºááá¯á·ááẠááŒááááááºá¡áá
áºáá»á¬ážááᯠááá°áááºá
О
. áá»áœááºá¯ááºááá¯á·ááẠááœááºáá»ááºáá¬ážáá±á¬ ááŒááááááºáá»á¬ážá០ááŒá®ážáá±á¬ áá±á¬ááºáá
áºááá·áº (á¡áá¯ááº) ááᯠáá°áááºá ááá¯á·ááŒá±á¬áá·áº ááá¯á¡ááºáá±á¬ áá±á«ááºážá
ááºážááŸá¯ áááŒá®ážááá»ááºáž áá¶ááá¬ááẠá¡áááºááẠá¡áááºááẠá
áááºáááºá
á¡á¬ážáá¯á¶áž! ááá¯áá»áœááºá¯ááºááá¯á·ááẠMariana Trench áá¡áááºááŸáá¯ááºážáá¯á¶ážáá±á¬ááºááŒááºááá¯ááŸá¬ááœá±áááºá¡áááºááá·áºááŒá áºáá±áá«ááŒá®á á ááá¯ááºááŒá áá¯á·á
gradient áááºážáááºááŸá¯á¡ááœáẠáá¯ááº
# МапОÑеЌ ÑÑМкÑÐžÑ Ð³ÑаЎОеМÑМПгП ÑпÑÑка без ОÑпПлÑÐ·ÐŸÐ²Ð°ÐœÐžÑ Ð±ÐžÐ±Ð»ÐžÐŸÑекО NumPy.
# ЀÑМкÑÐžÑ ÐœÐ° вÑ
ПЎ пÑÐžÐœÐžÐŒÐ°ÐµÑ ÐŽÐžÐ°Ð¿Ð°Ð·ÐŸÐœÑ Ð·ÐœÐ°ÑеМОй x,y, ÐŽÐ»ÐžÐœÑ Ñага (пП ÑЌПлÑаМОÑ=0,1), ЎПпÑÑÑОЌÑÑ Ð¿ÐŸÐ³ÑеÑМПÑÑÑ(tolerance)
def gradient_descent_usual(x_us,y_us,l=0.1,tolerance=0.000000000001):
# ÑÑЌЌа зМаÑеМОй (вÑе ЌеÑÑÑа)
sx = sum(x_us)
# ÑÑЌЌа ОÑÑОММÑÑ
ПÑвеÑПв (вÑÑÑÑка за веÑÑ Ð¿ÐµÑОПЎ)
sy = sum(y_us)
# ÑÑЌЌа пÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÑ Ð·ÐœÐ°ÑеМОй Ма ОÑÑОММÑе ПÑвеÑÑ
list_xy = []
[list_xy.append(x_us[i]*y_us[i]) for i in range(len(x_us))]
sxy = sum(list_xy)
# ÑÑЌЌа кваЎÑаÑПв зМаÑеМОй
list_x_sq = []
[list_x_sq.append(x_us[i]**2) for i in range(len(x_us))]
sx_sq = sum(list_x_sq)
# кПлОÑеÑÑвП зМаÑеМОй
num = len(x_us)
# МаÑалÑМÑе зМаÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв, ПпÑеЎелеММÑе пÑевЎПÑлÑÑайМÑÐŒ ПбÑазПЌ
a = float(random.uniform(-0.5, 0.5))
b = float(random.uniform(-0.5, 0.5))
# ÑПзЎаеЌ ЌаÑÑОв Ñ ÐŸÑОбкаЌО, ÐŽÐ»Ñ ÑÑаÑÑа ОÑпПлÑзÑеЌ зМаÑÐµÐœÐžÑ 1 О 0
# пПÑле завеÑÑÐµÐœÐžÑ ÑпÑÑка ÑÑаÑÑПвÑе зМаÑÐµÐœÐžÑ ÑЎалОЌ
errors = [1,0]
# запÑÑкаеЌ ÑОкл ÑпÑÑка
# ÑОкл ÑабПÑÐ°ÐµÑ ÐŽÐŸ ÑеÑ
пПÑ, пПка ПÑклПМеМОе пПÑлеЎМей ПÑОбкО ÑÑÐŒÐŒÑ ÐºÐ²Ð°ÐŽÑаÑПв ÐŸÑ Ð¿ÑеЎÑÐŽÑÑей, Ме бÑÐŽÐµÑ ÐŒÐµÐœÑÑе tolerance
while abs(errors[-1]-errors[-2]) > tolerance:
a_step = a - l*(num*a + b*sx - sy)/num
b_step = b - l*(a*sx + b*sx_sq - sxy)/num
a = a_step
b = b_step
ab = [a,b]
errors.append(errors_sq_Kramer_method(ab,x_us,y_us))
return (ab),(errors[2:])
# запОÑеЌ ЌаÑÑОв зМаÑеМОй
list_parametres_gradient_descence = gradient_descent_usual(x_us,y_us,l=0.1,tolerance=0.000000000001)
print ' 33[1m' + ' 33[4m' + "ÐМаÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв a О b:" + ' 33[0m'
print 'a =', round(list_parametres_gradient_descence[0][0],3)
print 'b =', round(list_parametres_gradient_descence[0][1],3)
print
print ' 33[1m' + ' 33[4m' + "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй:" + ' 33[0m'
print round(list_parametres_gradient_descence[1][-1],3)
print
print ' 33[1m' + ' 33[4m' + "ÐПлОÑеÑÑвП ОÑеÑаÑОй в гÑаЎОеМÑМПЌ ÑпÑÑке:" + ' 33[0m'
print len(list_parametres_gradient_descence[1])
print
Mariana Trench áá¡á±á¬ááºááŒá±ááá¯á· áá¯ááºáááºážááŒá®áž ááá¯áá±áá¬ááœáẠáá°áá®áá±á¬ááááºážááááºážáááºááá¯ážáá»á¬ážááᯠááœá±á·ááŸááá²á·áááºá
О
á¡ááá¡áá» áá»áŸá±á¬áºááá·áºáááá·áºá¡áá¬ááŒá
áºáááºá
áá±á¬ááºáááºáá¯ááºááŒáá·áºáá¡á±á¬ááºá áá®áá áºááŒáááºááŸá¬áᬠáá»áœááºá¯ááºááá¯á·áá²á· áá±áááºáá¬ááºááŸá¬ á¡ááŒá¬ážáááºážááá¬ááœá±áá²á· ááŒáá·áºááŸááºáá±ááá·áº á á¬ááŒáá·áºááá¯ááºá numpy.
gradient áááºážáááºááŸá¯á¡ááœáẠáá¯áẠ(NumPy)
# пеÑеЎ ÑеЌ ПпÑеЎелОÑÑ ÑÑМкÑÐžÑ ÐŽÐ»Ñ Ð³ÑаЎОеМÑМПгП ÑпÑÑка Ñ ÐžÑпПлÑзПваМОеЌ бОблОПÑекО NumPy,
# МапОÑеЌ ÑÑМкÑÐžÑ ÐŸÐ¿ÑÐµÐŽÐµÐ»ÐµÐœÐžÑ ÑÑÐŒÐŒÑ ÐºÐ²Ð°ÐŽÑаÑПв ПÑклПМеМОй Ñакже Ñ ÐžÑпПлÑзПваМОеЌ NumPy
def error_square_numpy(ab,x_np,y_np):
y_pred = np.dot(x_np,ab)
error = y_pred - y_np
return sum((error)**2)
# МапОÑеЌ ÑÑМкÑÐžÑ Ð³ÑаЎОеМÑМПгП ÑпÑÑка Ñ ÐžÑпПлÑзПваМОеЌ бОблОПÑекО NumPy.
# ЀÑМкÑÐžÑ ÐœÐ° вÑ
ПЎ пÑÐžÐœÐžÐŒÐ°ÐµÑ ÐŽÐžÐ°Ð¿Ð°Ð·ÐŸÐœÑ Ð·ÐœÐ°ÑеМОй x,y, ÐŽÐ»ÐžÐœÑ Ñага (пП ÑЌПлÑаМОÑ=0,1), ЎПпÑÑÑОЌÑÑ Ð¿ÐŸÐ³ÑеÑМПÑÑÑ(tolerance)
def gradient_descent_numpy(x_np,y_np,l=0.1,tolerance=0.000000000001):
# ÑÑЌЌа зМаÑеМОй (вÑе ЌеÑÑÑа)
sx = float(sum(x_np[:,1]))
# ÑÑЌЌа ОÑÑОММÑÑ
ПÑвеÑПв (вÑÑÑÑка за веÑÑ Ð¿ÐµÑОПЎ)
sy = float(sum(y_np))
# ÑÑЌЌа пÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐžÑ Ð·ÐœÐ°ÑеМОй Ма ОÑÑОММÑе ПÑвеÑÑ
sxy = x_np*y_np
sxy = float(sum(sxy[:,1]))
# ÑÑЌЌа кваЎÑаÑПв зМаÑеМОй
sx_sq = float(sum(x_np[:,1]**2))
# кПлОÑеÑÑвП зМаÑеМОй
num = float(x_np.shape[0])
# МаÑалÑМÑе зМаÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв, ПпÑеЎелеММÑе пÑевЎПÑлÑÑайМÑÐŒ ПбÑазПЌ
a = float(random.uniform(-0.5, 0.5))
b = float(random.uniform(-0.5, 0.5))
# ÑПзЎаеЌ ЌаÑÑОв Ñ ÐŸÑОбкаЌО, ÐŽÐ»Ñ ÑÑаÑÑа ОÑпПлÑзÑеЌ зМаÑÐµÐœÐžÑ 1 О 0
# пПÑле завеÑÑÐµÐœÐžÑ ÑпÑÑка ÑÑаÑÑПвÑе зМаÑÐµÐœÐžÑ ÑЎалОЌ
errors = [1,0]
# запÑÑкаеЌ ÑОкл ÑпÑÑка
# ÑОкл ÑабПÑÐ°ÐµÑ ÐŽÐŸ ÑеÑ
пПÑ, пПка ПÑклПМеМОе пПÑлеЎМей ПÑОбкО ÑÑÐŒÐŒÑ ÐºÐ²Ð°ÐŽÑаÑПв ÐŸÑ Ð¿ÑеЎÑÐŽÑÑей, Ме бÑÐŽÐµÑ ÐŒÐµÐœÑÑе tolerance
while abs(errors[-1]-errors[-2]) > tolerance:
a_step = a - l*(num*a + b*sx - sy)/num
b_step = b - l*(a*sx + b*sx_sq - sxy)/num
a = a_step
b = b_step
ab = np.array([[a],[b]])
errors.append(error_square_numpy(ab,x_np,y_np))
return (ab),(errors[2:])
# запОÑеЌ ЌаÑÑОв зМаÑеМОй
list_parametres_gradient_descence = gradient_descent_numpy(x_np,y_np,l=0.1,tolerance=0.000000000001)
print ' 33[1m' + ' 33[4m' + "ÐМаÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв a О b:" + ' 33[0m'
print 'a =', round(list_parametres_gradient_descence[0][0],3)
print 'b =', round(list_parametres_gradient_descence[0][1],3)
print
print ' 33[1m' + ' 33[4m' + "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй:" + ' 33[0m'
print round(list_parametres_gradient_descence[1][-1],3)
print
print ' 33[1m' + ' 33[4m' + "ÐПлОÑеÑÑвП ОÑеÑаÑОй в гÑаЎОеМÑМПЌ ÑпÑÑке:" + ' 33[0m'
print len(list_parametres_gradient_descence[1])
print
áá±á¬áºááááºážáááºááá¯ážáá»á¬áž
О
áááŒá±á¬ááºážáá²ááá¯ááºáá±á¬á
gradient áááºážá ááºá¡ááœááºáž error áááºáá²á·ááá¯á· ááŒá±á¬ááºážáá²áá²á·áááºááᯠááŒáá·áºááŒáá«á áá¯á·á ááá¯ááá¯áááºááŸá¬á á¡ááá·áºáá áºáá¯á á®ááœáẠááŸá áºáááºááœá±áááºááŸá¯áá±á«ááºážáááºáá»á¬áž áááºááá¯á·ááŒá±á¬ááºážáá²ááœá¬ážáááºááᯠáá±á·áá¬ááŒáá·áºááŒáá«á áá¯á·á
ááŸá áºáááºááœá±áááºááŸá¯áá»á¬ážá áá±á«ááºážáááºáá»á¬ážááᯠáá¯á¶áá±á¬áºáááºá¡ááœáẠáá¯ááº
print 'ÐÑаÑОкâ4 "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй пП-ÑагПвП"'
plt.plot(range(len(list_parametres_gradient_descence[1])), list_parametres_gradient_descence[1], color='red', lw=3)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()áááẠáá¶áá«áẠ4 " gradient áááºážá ááºá¡ááœááºáž ááŸá áºáááºááœá±áááºááŸá¯áá±á«ááºážáááº"

ááááºáá±á«áºááœáẠá¡ááá·áºáá
áºááá·áºáá»ááºážá
á®ááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬áž áá»á±á¬á·áááºážáá¬áááºááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºáááŒá®áž á¡áá»áá¯á·áá±á¬ áááºáá«ááá²áá² ááŒá¯áá¯ááºááŸá¯áá»á¬ážááŒá®ážáá±á¬áẠá¡áá»á¬ážááá¯ááºáá®ážáá«ážáá»ááºážááŒá±á¬ááºážááᯠáááááŒá¯áááá«áááºá
áá±á¬ááºáá¯á¶ážá¡áá±áá²á·á áá¯ááºáá¯ááºáá±á¬ááºáá»áááºáá²á· ááœá¬ááŒá¬ážáá»ááºááᯠááá·áºááŸááºážááŒáá·áºáá¡á±á¬ááºá
gradient áááºážáááºááŸá¯ ááœááºáá»ááºáá»áááºááᯠáá¯á¶ážááŒááºááẠáá¯ááº
print ' 33[1m' + ' 33[4m' + "ÐÑÐµÐŒÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ Ð³ÑаЎОеМÑМПгП ÑпÑÑка без ОÑпПлÑÐ·ÐŸÐ²Ð°ÐœÐžÑ Ð±ÐžÐ±Ð»ÐžÐŸÑекО NumPy:" + ' 33[0m'
%timeit list_parametres_gradient_descence = gradient_descent_usual(x_us,y_us,l=0.1,tolerance=0.000000000001)
print '***************************************'
print
print ' 33[1m' + ' 33[4m' + "ÐÑÐµÐŒÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ Ð³ÑаЎОеМÑМПгП ÑпÑÑка Ñ ÐžÑпПлÑзПваМОеЌ бОблОПÑекО NumPy:" + ' 33[0m'
%timeit list_parametres_gradient_descence = gradient_descent_numpy(x_np,y_np,l=0.1,tolerance=0.000000000001)
áá»áœááºá¯ááºááá¯á· áá
áºáá¯áá¯ááŸá¬ážáá±ááŒá® ááŒá
áºáá±á¬ááºážááŒá
áºááá¯ááºáá±á¬áºáááºáž áááºážááẠá
á¬ááŒáá·áºááá¯ááºááᯠá¡áá¯á¶ážáááŒá¯áá±á¬ ááá¯ážááŸááºážáá±á¬ "á¡áááºááœááºáá±ážáá¬ážáá±á¬" áá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯ááŒá
áºáááºá numpy á
á¬ááŒáá·áºááá¯ááºááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯á ááœááºáá»ááºááŸá¯á¡áá»áááºááᯠááá¯ááá¯áá±á¬ááºážááœááºá
á±áááºá numpy.
ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠáááºáááºáááºááá±áá² ááá¯ážááŸááºážáá±á¬ linear regression equation ááá¯ááŒá±ááŸááºážááẠá¡ááŒá¬ážá áááºááŸá¯ááºááŸá¬ážááœááºáááºážáááºážáá áºáá¯ááᯠáá±á·áá¬ááẠáŠážáááºáá±áá«áááºá áá«ááá¯á·ááá¯ááœá±á·áá«á
Stochastic gradient áááºážáááºáááºá
stochastic gradient áááºážáááºááŒááºážá áá¯ááºáá±á¬ááºááŸá¯áááá¬áááᯠáá»ááºááŒááºá
áœá¬ áá¬ážáááºááá¯ááºáááºá áááºážááẠáá¬ááẠgradient áááºážáááºááŒááºážá០áááºážá ááœá¬ááŒá¬ážáá»ááºáá»á¬ážááᯠáá¯á¶ážááŒááºááẠááá¯áá±á¬ááºážáááºá áá»áœááºá¯ááºááá¯á·ááẠgradient áááºážáááºááŒááºážáááŒá
áºáááºááœááºá áááºážáááºáá¬áá±á¬ áá®áá»áŸááŒááºážáá»á¬ážááœááº
О
ááá°áá¬ááœáẠáááŸáááá¯ááºáá±á¬ á¡ááºá¹áá«áááºá¡á¬ážáá¯á¶ážá áááºááá¯ážáá»á¬ážááŸáá·áº á
á
áºááŸááºáá±á¬á¡ááŒá±áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá²á·ááẠ(ááá¯ááá¯áááºááŸá¬ á¡á¬ážáá¯á¶ážááá±á«ááºážáááºáá»á¬ážá
О
) stochastic gradient áá»áá¯ážááœááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠááá°áá¬ááœááºáá«ááŸááá±á¬ áááºááá¯ážá¡á¬ážáá¯á¶ážááᯠá¡áá¯á¶ážáááŒá¯áá±á¬áºáááºážá áááºážá¡á
á¬ážá pseudo-random áá¯áá±á«áºáá±á¬ ááá°áá¬á¡ááœáŸááºážááᯠááœá±ážáá»ááºááŒá®áž áááºážááááºááá¯ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«á
á¥ááá¬á¡á¬ážááŒáá·áºá á¡ááœáŸááºážááááºážááẠáá¶áá«áẠ3 (á) áᯠáááºááŸááºáá«á áááºááá¯ážáá»á¬ážááᯠáá°áááºá
О
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠáááºááá¯ážáá»á¬ážááᯠáááºážáááºáá±á¬áá®áá»áŸááŒááºážáá»á¬ážááœáẠá¡á
á¬ážááá¯ážááŒá®áž ááŒáá®ááááºá¡áá
áºáá»á¬ážááᯠáá¯á¶ážááŒááºáááºá ááá¯á·áá±á¬áẠááŒáá®ááááºáá»á¬ážááᯠáá¯á¶ážááŒááºááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠááá°áá¬ááœáŸááºážááááºážááᯠáá»áááºážáá»áááºáž áá¯á¶ážááŒááºáᬠáá
áºá
áááºáá
áºááá¯ááºážááœá²ááŒá¬ážáá±á¬áá®áá»áŸááŒááºážáá»á¬ážááœáẠá¡ááœáŸááºážááááºážáá»á¬ážááŸáá·áº áááºááá¯ááºááá·áº áááºááá¯ážáá»á¬ážááᯠá¡á
á¬ážááá¯ážáᬠááŒááááááºáá»á¬ážááᯠáááºážáááºážáá
áºááŒáá·áº áá¯á¶ážááŒááºáá«áááºá
О
á
áááºááá¯á· áá±á«ááºážáá¯á¶ á
áááºážáááºážááá·áºááá¯ááºá¡á±á¬áẠááááá
áºáá»ááºááœááºá áááºážááẠáá¯á¶ážáá¡áá¯ááºáá¯ááºáá¯á¶ááá±á«áºáá±á¬áºáááºážá á¡ááá·áºááá¯ááºážááœáẠá¡ááŸá¬ážááẠáá»á±á¬á·áááºážááœá¬ážáááºááá¯ááºáá±á¬áºáááºáž ááá±á¬áá¬ážá¡ááŸááºááŸááááºááᯠáááááŒá¯ááá·áºáááºááŸá¬ á¡ááŸááºáááºááŒá
áºáááºá
ááá¬ážááá¯ážáá»áá áºáá¯ááẠstochastic gradient áááºážáááºááŒááºážáá¡á¬ážáá¬áá»ááºáá»á¬ážáá¬ážá¡áááºáááºážá áá»áœááºá¯ááºááá¯á·áááá°áá¬á¡ááœááºá¡á á¬ážááẠá¡ááœááºááŒá®ážáá¬ážááŒá®áž áááºááá¯ážáá±á¬ááºáá±á«ááºážáá»á¬ážá áœá¬ááŒáá·áº ááá¯ááºážáá¬áá«áá ááá°áá¬áá áºáá¯áá¯á¶ážááẠáá»áááºážáá áºáá±á¬ááºááᯠá á®áá¶áá¯ááºáá±á¬ááºááẠááá¯áááœááºáá°áá«áááºá á€áá±áá¬ááœáẠstochastic gradient áááºážáááºáá¬ááŒááºážááŒá áºáááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá ááœá¬ááŒá¬ážáá»ááºáá»á¬ážá áœá¬ááᯠáá»áœááºá¯ááºááá¯á·áááááŒá¯áááááºááá¯ááºáá«á
áá¯ááºááá¯ááŒáá·áºáá¡á±á¬ááºá
stochastic gradient áááºážáááºááŸá¯á¡ááœáẠáá¯ááº
# ПпÑеЎелОЌ ÑÑМкÑÐžÑ ÑÑПÑ
.гÑаЎ.Ñага
def stoch_grad_step_usual(vector_init, x_us, ind, y_us, l):
# вÑбОÑаеЌ зМаÑеМОе ОкÑ, кПÑПÑПе ÑППÑвеÑÑÑвÑÐµÑ ÑлÑÑÐ°Ð¹ÐœÐŸÐŒÑ Ð·ÐœÐ°ÑÐµÐœÐžÑ Ð¿Ð°ÑаЌеÑÑа ind
# (ÑÐŒ.Ñ-ÑÐžÑ stoch_grad_descent_usual)
x = x_us[ind]
# ÑаÑÑÑОÑÑвÑаеЌ зМаÑеМОе y (вÑÑÑÑкÑ), кПÑПÑÐ°Ñ ÑППÑвеÑÑÑвÑÐµÑ Ð²ÑбÑÐ°ÐœÐœÐŸÐŒÑ Ð·ÐœÐ°ÑÐµÐœÐžÑ x
y_pred = vector_init[0] + vector_init[1]*x_us[ind]
# вÑÑОÑлÑеЌ ПÑÐžÐ±ÐºÑ ÑаÑÑеÑМПй вÑÑÑÑкО ПÑМПÑОÑелÑМП пÑеЎÑÑавлеММПй в вÑбПÑке
error = y_pred - y_us[ind]
# ПпÑеЎелÑеЌ пеÑвÑÑ ÐºÐŸÐŸÑЎОМаÑÑ Ð³ÑаЎОеМÑа ab
grad_a = error
# ПпÑеЎелÑеЌ вÑПÑÑÑ ÐºÐŸÐŸÑЎОМаÑÑ ab
grad_b = x_us[ind]*error
# вÑÑОÑлÑеЌ МПвÑй векÑÐŸÑ ÐºÐŸÑÑÑОÑОеМÑПв
vector_new = [vector_init[0]-l*grad_a, vector_init[1]-l*grad_b]
return vector_new
# ПпÑеЎелОЌ ÑÑМкÑÐžÑ ÑÑПÑ
.гÑаЎ.ÑпÑÑка
def stoch_grad_descent_usual(x_us, y_us, l=0.1, steps = 800):
# ÐŽÐ»Ñ ÑаЌПгП МаÑала ÑабПÑÑ ÑÑМкÑОО заЎаЎОЌ МаÑалÑМÑе зМаÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв
vector_init = [float(random.uniform(-0.5, 0.5)), float(random.uniform(-0.5, 0.5))]
errors = []
# запÑÑÑОЌ ÑОкл ÑпÑÑка
# ÑОкл ÑаÑÑОÑаМ Ма ПпÑеЎелеММПе кПлОÑеÑÑвП ÑагПв (steps)
for i in range(steps):
ind = random.choice(range(len(x_us)))
new_vector = stoch_grad_step_usual(vector_init, x_us, ind, y_us, l)
vector_init = new_vector
errors.append(errors_sq_Kramer_method(vector_init,x_us,y_us))
return (vector_init),(errors)
# запОÑеЌ ЌаÑÑОв зМаÑеМОй
list_parametres_stoch_gradient_descence = stoch_grad_descent_usual(x_us, y_us, l=0.1, steps = 800)
print ' 33[1m' + ' 33[4m' + "ÐМаÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв a О b:" + ' 33[0m'
print 'a =', round(list_parametres_stoch_gradient_descence[0][0],3)
print 'b =', round(list_parametres_stoch_gradient_descence[0][1],3)
print
print ' 33[1m' + ' 33[4m' + "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй:" + ' 33[0m'
print round(list_parametres_stoch_gradient_descence[1][-1],3)
print
print ' 33[1m' + ' 33[4m' + "ÐПлОÑеÑÑвП ОÑеÑаÑОй в ÑÑПÑ
аÑÑОÑеÑкПЌ гÑаЎОеМÑМПЌ ÑпÑÑке:" + ' 33[0m'
print len(list_parametres_stoch_gradient_descence[1])
áá»áœááºá¯ááºááá¯á·ááẠááááºážááááºážáá»á¬ážááᯠááá¯áá
áá¯ááºááŒáá·áºááŸá¯ááŒá®áž âáá«á áááºááá¯ááŒá
áºááá¯ááºááá²â áá°áá±á¬áá±ážááœááºážááᯠááááááá¯ááºááᯠáááºážáá¯ááºáá¬ážáááºá á¡ááŒá¬áž coefficient áááºááá¯ážáá»á¬áž áá»áœááºá¯ááºááá¯á· áááŸááá«áááºá
О
. stochastic gradient ááẠáá®áá»áŸááŒááºážá¡ááœáẠááá¯ááá¯ááá·áºáá»á±á¬áºáá±á¬ áá±á¬ááºáá»á¬ážááᯠááŸá¬ááœá±á·ááá¯ááºáá«ááá¬ážá áá¶ááá±á¬ááºážá
áœá¬áá²á·á ááŸá
áºáááºááœá±áááºááŸá¯áá»á¬ážááá±á«ááºážáááºááá¯ááŒáá·áºááẠáá¯á¶áá±á¬ááºááŒá®áž coefficients ááááºááá¯ážá¡áá
áºáá»á¬ážááŒáá·áº error áááºááá¯ááŒá®ážáá¬áááºááá¯ááœá±á·ááŒááºááááºááŒá
áºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠá
áááºáá»ááºá¡á¬ážáááºááẠá¡áá»ááºáááá¯áá«á error change áá²á· ááááºáá
áºáá¯ááᯠáááºáá±á¬ááºááŒáá·áºáá¡á±á¬ááºá
Stochastic gradient áááºážáááºááŸá¯ááœáẠááŸá áºáááºááœá±áááºááŸá¯áá±á«ááºážáááºááᯠááŒá¶á ááºááẠáá¯ááº
print 'ÐÑаÑОк â5 "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй пП-ÑагПвП"'
plt.plot(range(len(list_parametres_stoch_gradient_descence[1])), list_parametres_stoch_gradient_descence[1], color='red', lw=2)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()ááááºáá¶áá«áẠ5 "stochastic gradient áááºážáááºá ááºá¡ááœááºáž ááŸá áºáááºááœá±áááºááŸá¯áá±á«ááºážáááº"

á¡áá»áááºááá¬ážááá¯ááŒáá·áºááá¯ááºáá±á¬á· á¡áá¬á¡á¬ážáá¯á¶ážá áá±áá¬áá»ááŒá®áž á¡áá¯áá±á¬á· á¡á¬ážáá¯á¶ážááŒááºááá¯ááºáááºá
áá«ááᯠáá¬ááŒá áºáá¬áá²? á¡á±á¬ááºáá«á¡ááá¯ááºáž ááŒá áºááœá¬ážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá áºáááᯠáá»áááºážááœá±ážáá»ááºáá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·á á¡ááºáááá¯áá®áááºááẠáááºááœá±ááœááºáá»ááºáá¬ááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠáá»áŸá±á¬á·áá»ááẠááŸá¬ááœá±áá±á¬ ááœá±ážáá»ááºáá¬ážáá±á¬áá¡ááœááºááŒá áºáááºá ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá¬ážáá áºáááᯠááœá±ážáá»ááºááŒá®áž ááœááºáá»ááºááŸá¯ááᯠáááºáá«ááá²áá² ááŒá¯áá¯ááºáá±á¬áºáááºáž áá¯áááááœá±ážáá»ááºáá¬ážáá±á¬áá¡ááœáẠá¡ááŸá¬ážá¡ááœááºážááᯠáá»áŸá±á¬á·áá»áá±ážáá«áááºá áááááŸá áºáááẠááá¯ážááŸááºážáá±á¬ linear regression equation ááá»ááºážááŒá±á¬ááºážá០áááááá¬áá¬ááœá±áááºááœá¬ážáááºááᯠáááááá«á ááá¯ááá¯áááºááŸá¬ á€ááŸá áºáá¡ááœááºáž áááºááá·áºá¡áá¬ááá¯áááᯠááœá±ážáá»ááºáá±á¬á¡áá«á áááºážááá¯á·áá áºáá¯á á®á á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠáá»áŸá±á¬á·áá»ááŒááºážááŒáá·áºá áá»áœááºá¯ááºááá¯á·á á¡ááºáááá¯áá®áááºááẠááá°áá¬áá áºáá¯áá¯á¶ážá¡ááœáẠá¡ááŸá¬ážá¡ááœááºážááᯠááŒááºážáááºá áœá¬ ááá¯ážáá¬á á±áááºáᯠááá¯ááá¯áá«áááºá áá«ááᯠáá¬áá¯ááºáááá²á á¡ááŒá±á ááá¯ážááŸááºážáá«áááº- áááºážáááºáá²á· á¡ááá·áºááᯠáá»áŸá±á¬á·áá»ááá¯á· ááá¯áá«áááºá áá±á¬ááºáá¯á¶ážááœááºá áááºážáááºááá·áºá¡ááá·áºááᯠáá»áŸá±á¬á·áá»ááŒááºážááŒáá·áº á¡ááŸá¬ážááẠá¡áááºá¡áááºáž âáá¯ááºáá±áááºâ ááá¯áááºáž áááºááœá¬ážáááºááŒá áºáááºá ááá¯á·ááá¯ááºá "áá¯ááºááŒááºáž" á¡ááŸá¬ážáááºáááºááá·áºáááºááá¯ááºáá±á¬áºáááºážáááºážáááºá€áá»áŸááŒááºáááºá áœá¬áá¯ááºáá±á¬ááºáááºááá¯áẠ:) á á áºáá±ážááŒáá«á áá¯á·á
á¡ááá¯ážááŸá¯ááºážá¡áááºážáááºááŒáá·áº SGD ááá¯áááºáááºááẠáá¯ááº
# запÑÑÑОЌ ÑÑМкÑОÑ, ÑЌеМÑÑОв Ñаг в 100 Ñаз О ÑвелОÑОв кПлОÑеÑÑвП ÑагПв ÑППÑвеÑÑвÑÑÑе
list_parametres_stoch_gradient_descence = stoch_grad_descent_usual(x_us, y_us, l=0.001, steps = 80000)
print ' 33[1m' + ' 33[4m' + "ÐМаÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв a О b:" + ' 33[0m'
print 'a =', round(list_parametres_stoch_gradient_descence[0][0],3)
print 'b =', round(list_parametres_stoch_gradient_descence[0][1],3)
print
print ' 33[1m' + ' 33[4m' + "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй:" + ' 33[0m'
print round(list_parametres_stoch_gradient_descence[1][-1],3)
print
print ' 33[1m' + ' 33[4m' + "ÐПлОÑеÑÑвП ОÑеÑаÑОй в ÑÑПÑ
аÑÑОÑеÑкПЌ гÑаЎОеМÑМПЌ ÑпÑÑке:" + ' 33[0m'
print len(list_parametres_stoch_gradient_descence[1])
print 'ÐÑаÑОк â6 "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй пП-ÑагПвП"'
plt.plot(range(len(list_parametres_stoch_gradient_descence[1])), list_parametres_stoch_gradient_descence[1], color='red', lw=2)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()
áááẠáá¶áá«áẠ6 "stochastic gradient áááºážáááºá
ááºá¡ááœááºáž ááŸá
áºáááºááœá±áááºááŸá¯áá±á«ááºáž (ááŒá±ááŸááºáž 80)"

ááááºážááá¬ááºážáá»á¬áž ááá¯ážáááºáá¬áá±á¬áºáááºáž á
á¶ááá®áá±ážáá«á áá¯áá¬ážá¡á¬ážááŒáá·áºá á€áááºážááŒáá·áº ááŒááºááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºáá¯á¶ážá¡ááŒááẠ1000 ááœáẠá¡ááŸá¬ážá¡áááºážáá¯á¶ážááŒá¯áá¯ááºáá¬ážááá·áº coefficients ááááºááá¯ážáá»á¬ážááᯠááœá±ážáá»ááºáááºá ááŸááºáá«áááºá á€á¡ááœáẠáá»áœááºá¯ááºááá¯á·áááºáááºáž áá±á¬áºááááºážáá»á¬ážá áááºááá¯ážáá»á¬ážááᯠáááºážááá¯á·ááá¯ááºááá¯áẠáá»áá±ážááááºááŒá
áºáá«áááºá áá«ááᯠáá»áœááºáá±á¬áºááá¯á· ááá¯ááºáá±ááá·áº á¡áá»áááºááá¬ážááᯠá¡á¬áá¯á¶á
áá¯ááºáá«á áá»á±á¬ááœá±á·áá¯á¶áááŒá®áž á¡ááŸá¬ážá¡ááœááºážá á¡áá®á¡áá»áŸ áá»á±á¬á·áááºážááœá¬ážáá¯á¶ááááºá ááááºáá±á¬á· áá«á áááŸááºáá«áá°ážá áááá¡ááŒááẠ1000 ááá¯ááŒáá·áºááŸá¯ááŒá®áž áá±á¬ááºáá¯á¶ážááŸáá·áº ááŸáá¯ááºážááŸááºááŒáá·áºááŒáá«á
áá¯á·á
SGD ááá¬ážá¡ááœáẠáá¯áẠ(áááá¡ááá·áº 1000)
print 'ÐÑаÑОк â7 "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй пП-ÑагПвП. ÐеÑвÑе 1000 ОÑеÑаÑОй"'
plt.plot(range(len(list_parametres_stoch_gradient_descence[1][:1000])),
list_parametres_stoch_gradient_descence[1][:1000], color='red', lw=2)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()
print 'ÐÑаÑОк â7 "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй пП-ÑагПвП. ÐПÑлеЎМОе 1000 ОÑеÑаÑОй"'
plt.plot(range(len(list_parametres_stoch_gradient_descence[1][-1000:])),
list_parametres_stoch_gradient_descence[1][-1000:], color='red', lw=2)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()ááááºáá¶áá«áẠ7 âááŸá áºáááºááœá±áááºááŸá¯áá±á«ááºážááẠSGD (áááááŒá±ááŸááºáž 1000)â

ááááºáá¶áá«áẠ8 "ááŸá
áºáááºááœá±áááºááŸá¯áá±á«ááºážááẠSGD (áá±á¬ááºáá¯á¶ážá¡ááá·áº 1000)"

áááºážáááºááŒááºážáá¡á
ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áŸáá»áŸáááá°áá®ááŒá®áž á¡ááŸá¬ážá¡ááœááºážáá»áááºážááŸá¯ááᯠáááááŒá¯áááá«áááºá áá±á¬ááºáá¯á¶ážá¡ááŒáááºááœá±ááŸá¬ error á 1,475 áá²á·áááºááá¯ážááᯠáááºááŒá®áž áááºáááºááœá¬ážáá±áá¬ááá¯ááœá±á·ááŒááºáááŒá®áž ááá»áá¯á·á¡ááá¯ááºá¡ááá·áºááœá±ááŸá¬áááºáž áá® optimal value áá²á· áá®áá»áŸáá±ááá·áº áá±á¬ááºáá±á¬á· áááºáááºááœá¬ážáá±ážáááº... áááºááŒá±á¬áá«áááºá ááááºážááááºážáá»á¬áž
О
ááŒá®ážáá»áŸáẠerror áááºážáá±á¬áá°áá»á¬ážááᯠááœá±ážáá«á ááá¯á·áá±á¬áºá áá»áœááºá¯ááºááá¯á·ááœáẠááá¯ááá±ážáááºáá±á¬ááŒá¿áá¬áá
áºáá¯ááŸááá«áááº- á¡áá±á¬ááºážáá¯á¶ážááŸáá·áºáá®ážá
ááºáá±á¬áááºááá¯ážáá»á¬ážáááŸáááẠááŒá±ááŸááºážáá±á«ááºáž 80 (áá¯ááºááá¯ááŒáá·áºáá«) ááá¯áá¯ááºáá±á¬ááºááá«áááºá áááºážááẠstochastic gradient descent ááŸáá·áº gradient descent ááŸáá·áº áááºá
ááºááŒá®áž stochastic gradient á០ááœááºáá»ááºáá»áááºááᯠáá»áœá±áá¬ááŒááºážá¡áá°á¡áááŸáá·áº ááá·áºáá»ááºáá±áá«áááºá áá¬ááœá±ááᯠááŒá¯ááŒááºááŒá®áž ááŒáŸáá·áºáááºááá¯ááºááá²á áááá¡ááŒáááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá¯á¶ááŒááºááŸá¯ááŸáááŸá áá»áááºážááœá¬ážáááºááᯠáááááŒá¯ááááẠááá²áááºážáá±á ááá¯á·ááŒá±á¬áá·áº áááá¡ááŒáááºááœáẠááŒá®ážáá¬ážáá±á¬ááŒá±ááŸááºážáá
áºáá¯ááᯠáá»ááºáá¬ážáá²á·áᬠáá»áœááºá¯ááºááá¯á·ááŸá±á·áááºááœá¬ážááá·áºá¡ááá¯ááºáž ááŒá±ááŸááºážááᯠáá»áŸá±á¬á·áá»ááá·áºáááºá á€áá±á¬ááºážáá«ážááœáẠáá»áœááºá¯ááºááá¯á· á€á¡áá¬ááᯠááá¯ááºáá« - ááŸááºááœááºážáá±ááŒá®ááŒá
áºáááºá áá¯ááºáá»ááºáá²á·áá°ááœá±á áááºááá¯áá¯ááºáááá²ááá¯áᬠááááºáá«áá°áž :)
ááᯠá á¬ááŒáá·áºááá¯ááºááᯠá¡áá¯á¶ážááŒá¯á stochastic gradient áááºážáááºááŸá¯ááᯠáá¯ááºáá±á¬ááºááŒáá«á áá¯á· numpy (á¡áááºá ááœá±á·ááŸááá²á·áá²á· áá»á±á¬ááºáá¯á¶ážááœá±ááᯠááááááá«á á±áá²á·)
Stochastic Gradient Descent (NumPy) á¡ááœáẠáá¯ááº
# ÐŽÐ»Ñ ÐœÐ°Ñала МапОÑеЌ ÑÑМкÑÐžÑ Ð³ÑаЎОеМÑМПгП Ñага
def stoch_grad_step_numpy(vector_init, X, ind, y, l):
x = X[ind]
y_pred = np.dot(x,vector_init)
err = y_pred - y[ind]
grad_a = err
grad_b = x[1]*err
return vector_init - l*np.array([grad_a, grad_b])
# ПпÑеЎелОЌ ÑÑМкÑÐžÑ ÑÑПÑ
аÑÑОÑеÑкПгП гÑаЎОеМÑМПгП ÑпÑÑка
def stoch_grad_descent_numpy(X, y, l=0.1, steps = 800):
vector_init = np.array([[np.random.randint(X.shape[0])], [np.random.randint(X.shape[0])]])
errors = []
for i in range(steps):
ind = np.random.randint(X.shape[0])
new_vector = stoch_grad_step_numpy(vector_init, X, ind, y, l)
vector_init = new_vector
errors.append(error_square_numpy(vector_init,X,y))
return (vector_init), (errors)
# запОÑеЌ ЌаÑÑОв зМаÑеМОй
list_parametres_stoch_gradient_descence = stoch_grad_descent_numpy(x_np, y_np, l=0.001, steps = 80000)
print ' 33[1m' + ' 33[4m' + "ÐМаÑÐµÐœÐžÑ ÐºÐŸÑÑÑОÑОеМÑПв a О b:" + ' 33[0m'
print 'a =', round(list_parametres_stoch_gradient_descence[0][0],3)
print 'b =', round(list_parametres_stoch_gradient_descence[0][1],3)
print
print ' 33[1m' + ' 33[4m' + "СÑЌЌа кваЎÑаÑПв ПÑклПМеМОй:" + ' 33[0m'
print round(list_parametres_stoch_gradient_descence[1][-1],3)
print
print ' 33[1m' + ' 33[4m' + "ÐПлОÑеÑÑвП ОÑеÑаÑОй в ÑÑПÑ
аÑÑОÑеÑкПЌ гÑаЎОеМÑМПЌ ÑпÑÑке:" + ' 33[0m'
print len(list_parametres_stoch_gradient_descence[1])
print
áááºááá¯ážáá»á¬ážááẠá¡áá¯á¶ážáááŒá¯áá² áááºážáá¬áá±á¬á¡áá«ááŸáá·áº áá®ážáá«ážáá°áá«áááºá numpy. ááá¯á·áá±á¬áº á€áááºááŸá¬ áá¯áá¹ááááŸááááºá
Stochastic gradient áááºážáááºááŒááºážáá»á¬ážááẠáá»áœááºá¯ááºááá¯á·ááᯠáááºáá»áŸááŒá¬á¡á±á¬ááºááŒá¯áá¯ááºáá²á·áááºááᯠáá±á·áá¬ááŒáá·áºááŒáá«á áá¯á·á
SGD ááœááºáá»ááºáá»áááºááᯠáá¯á¶ážááŒááºáááºá¡ááœáẠáá¯áẠ(ááŒá±ááŸááºáž 80)
print ' 33[1m' + ' 33[4m' +
"ÐÑÐµÐŒÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÑÑПÑ
аÑÑОÑеÑкПгП гÑаЎОеМÑМПгП ÑпÑÑка без ОÑпПлÑÐ·ÐŸÐ²Ð°ÐœÐžÑ Ð±ÐžÐ±Ð»ÐžÐŸÑекО NumPy:"
+ ' 33[0m'
%timeit list_parametres_stoch_gradient_descence = stoch_grad_descent_usual(x_us, y_us, l=0.001, steps = 80000)
print '***************************************'
print
print ' 33[1m' + ' 33[4m' +
"ÐÑÐµÐŒÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÑÑПÑ
аÑÑОÑеÑкПгП гÑаЎОеМÑМПгП ÑпÑÑка Ñ ÐžÑпПлÑзПваМОеЌ бОблОПÑекО NumPy:"
+ ' 33[0m'
%timeit list_parametres_stoch_gradient_descence = stoch_grad_descent_numpy(x_np, y_np, l=0.001, steps = 80000)
áá±á¬áá²ááá¯á·ááá¯áááºáá±áá± ááááºáá»á¬ážááá¯ááŸá±á¬ááºáá±ááŒá
áºáááº- áá
áºááẠ"ááá¯ááºááá¯ááºáá±ážáá¬ážáá±á¬" áá±á¬áºááŒá°áá¬ááẠá¡áá±á¬ááºážáá¯á¶ážááááºááá¯ááŒááááºá á€á¡áá¬á¡á¬ážáá¯á¶ážááẠá
á¬ááŒáá·áºááá¯ááºááᯠá¡áá¯á¶ážááŒá¯ááẠááá¯ááá¯ááááºááœá±á·áá±á¬áááºážáááºážáá»á¬áž ááŸáááá·áºáááºáᯠá¡ááŒá¶ááŒá¯áá¬ážáááºá numpyááœááºáá»ááºááŸá¯áá¯ááºáááºážáá»á¬ážááᯠá¡ááŸááºáááẠááŒááºáááºá
á±áááºá á€áá±á¬ááºážáá«ážá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯á·á¡ááŒá±á¬ááºáž áá±á·áá¬áááºááá¯ááºáá«á á¡á¬ážáááºáá»áááºááœá±ááŸá¬ á
ááºážá
á¬ážá
áá¬ááœá±ááŸáááẠ:)
á¡áá»ááºážáá»á¯ááº
á¡áá»ááºážáá»á¯ááºááá±ážáá® áá»áœááºá¯ááºááá¯á·ááá»á áºááŸá áœá¬áá±á¬á á¬áááºáá°áá¶á០ááŒá áºááá¯ááºááŒá±á¡ááŸááá¯á¶ážáá±ážááœááºážáá áºáá¯ááᯠáá»áœááºá¯ááºááŒá±ááŒá¬ážááá¯áá«áááºá á¡áááºááŒá±á¬áá·áºáááºážáá°áá°- á ááºá á áºá¡á¬ážááŒáá·áº á¡áá»áá¯ážá¡ááœááºáá»á¬ážááŸáá·áº á€áá²á·ááá¯á· âááŸááºážáááºážááŸáááºá ááºááŒááºážâ ááẠá¡áááºááŒá±á¬áá·áºáááºážá áá»áœááºá¯ááºááá¯á·áááºá á€áá»áŸáá±á¬ááºá¡á áœááºážáááºááŒá®áž ááá¯ážááŸááºážáá±á¬áááááá¬áá áºáᯠáá»áœááºá¯ááºááá¯á·áááºáááŸááá»áŸáẠá¡ááá¯ážáááºááŒá±áááá·áºááá¯ááºážááᯠááŸá¬ááœá±áááºá¡ááœáẠáá±á¬ááºáá±á«áºá¡áááºá¡áááºáž (áá»á¬ážá¡á¬ážááŒáá·áº á¡áááºáž) áááºážáá»áŸá±á¬ááºááẠááá¯á¡ááºáá«ááááºážá ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááŒá±ááŸááºážáá»ááºáá¯á¶á á¶á
áá®áá±ážááœááºážáá²á· á¡ááŒá±á áá»ááºááŸá¬ááŒááºáá±á«áºááŸá¬ ááŸááá±áá«áááºá ááᯠáá»áœááºá¯ááºááá¯á·ááẠá
á
áºááŸááºáá±á¬ á¡ááŒá±ááŒá
áºááá·áº á¡ááœááºááá¯ážááŸááºážáá±á¬ á¥ááá¬ááᯠááŒáá·áºáá«á
ááá¹ááá¬áá
áºáá¯áá±á«áº áá°áááº
. ááááŸá¬ áá«ááᯠáááŒá¬áá áááŒááºááá²á·á¡ááœáẠáá«ááá¯á·ááŸá¬ ááá¹ááᬠ2á 30á 50 ááá¯á·ááá¯áẠááá¯á·áááºáá ááŸááá±áááºááá¯á· á
áááºáá°ážááŒáá·áºááŒáá«á
áá¯á·á áááºááœáŸááºážáá»ááºáá
áºáá¯á
á®á¡ááœáẠáá±á¬ááºáá±á«ááºážáá»á¬ážá
áœá¬ ááá¯á·ááá¯áẠáá±á¬ááºážááááºážáááºááá¯ážáá»á¬ážááá¯ááẠááá·áºááŒáá«á
áá¯á·á á€ááá
á¹á
ááœááºá ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯á¡ááŒá±ááẠá
ááºážáááºááŸá¯ááᯠáá¶ááá¯ááºáááºááŸáááŒá®áž áá»ááŸá¯á¶ážáááºááá¯ááºáá±á áá
áºáááºá gradient áááºážáááºááŒááºážááŸáá·áº áááºážáááœá²ááœá²áá»ááºáá»á¬ážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž áááºážááá¯ááºááá¯á· áá
áºááŒááºážááŒááºáž áá®ážáááºáá¬á
á±áááá·áºááẠ- áá¯ááºáá±á¬ááºáá»ááºá á¡áááá·áºáá¯á¶ážááŒá
áºáááºá ááŒááºááŸá¯ááºážá¡ááœáẠá
áááºááá°áá«ááŸáá·áº - ááŒá±ááŸááºážá¡ááŸáẠ(á¡ááŒááºááŸá¯ááºáž) ááᯠáááºááŸááºá ááááºážááŸáááá¯ááºá
á±ááá·áº áááºážáááºážáá»á¬ážááᯠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
ááá¯áááºáž áááá·áºá¡áá»ááºážáá»á¯ááºá
ááááŠážá áœá¬á áá±á¬ááºážáá«ážááœááºáááºááŒáá¬ážáá±á¬á¡ááŒá±á¬ááºážá¡áá¬ááẠááá¯ážááŸááºážáá±á¬ (áá¬áá) áá»ááºážááŒá±á¬ááºážáá¯ááºáá¯ááºááŸá¯áá®áá»áŸááŒááºážáá»á¬ážááᯠáááºááá¯á·ááŒá±ááŸááºážááááºááᯠáá¬ážáááºááẠ"áá±áá¬áááá¹áá¶ááá¬ááŸááºáá»á¬áž" ááá¯á¡á ááŒá¯ááẠáá°áá®áá±ážáááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
áá¯áááá áá»áœááºá¯ááºááá¯á·ááẠáá®áá»áŸááŒááºážá¡á¬áž ááŒá±ááŸááºážááẠáááºážáááºážáá»á¬ážá áœá¬ááᯠááŒáá·áºááŸá¯áá²á·áááºá á¡áá¯á¡ááŒá±á¡áá±áá±á«áºáá°áááºááŒá®áž ááŒá¿áá¬ááŒá±ááŸááºážááá¯á· á¡ááá·áºáá±á¬áºáá¯á¶ážááᯠááœá±ážáá»ááºááá¯ááºáá«ááŒá®á
ááááá áááºááá·áºáááºáááºáá»á¬ážá áá«áá«ááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºáá²á·áááºá á¡áááºáá±á¬ááºá¡ááá·áº áááºážáááºááŒááºáž ááŒá±ááŸááºážá¡ááŸááºá á€áááºááŸááºáá»ááºááᯠáá»á áºáá»á°ááŸá¯ááááá«á á¡áááºááœááºáá±á¬áºááŒáá²á·ááá·áºá¡ááá¯ááºáž ááœááºáá»ááºááŸá¯áá¯ááºáá»á ááááºááᯠáá»áŸá±á¬á·áá»áááºá¡ááœáẠáááºážáááºá ááºá¡ááœááºáž á¡ááá·áºá¡ááŸááºááᯠááŒá±á¬ááºážáá²ááá·áºáááºá
á áá¯áá¹áá¡áá»ááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá "ááá¯ááºááá¯ááºáá±ážáá¬ážáá±á¬" áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠááœááºáá»ááºááŸá¯áá»á¬ážá¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážá¡áá»áááºááááºáá»á¬ážááᯠááŒááá²á·áááºá á€áááºááŸá¬ á á¬ááŒáá·áºááá¯ááºá á áœááºážáá±á¬ááºááá¯ááºáááºáá»á¬ážááᯠááá±á¬áºáááºááŸááºáááºá¡áá¯á¶ážá¡áá»á¬ážáá¯á¶ážááá¯ááºááŒááºážááŒá±á¬áá·áº ááŒá áºááá¯ááºáááºá numpy. áá«áá±ááá·áº ááŒá áºááá¯ááºááẠá¡á±á¬ááºáá« áááá¯á¶ážá áá°á·áá¬áá° á¡ááŒá¶ááŒá¯áá«áááºá áá áºáááºááœááºá áá áºáá«áá áºáá¶ááœáẠááá¯ááºáá¯á¶áá±á¬áááºááŒááºáá°ááá»ááºáá»á¬ážááᯠáá±ážááœááºážáá¯ááºááá»áá¯ážáááºááŒá®áž á¡ááŒá¬ážáá áºáááºááœááºáá° á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŸá¯ááºááœá±ážá á±ááá·áº á¡ááŒá²áááºážáááá¯ááºáááºáá« - ááá·áºáá»ááºáááºá¡áá±ááŸáá·áº áá áºáá«áá áºáá¶ááœáẠááŒá¿áá¬áá áºáá¯ááᯠááŒá±ááŸááºážáá¬ááœáẠááá¯ááá¯ááá¯ážááŸááºážáá±á¬áááºážáááºážá ááá¯ááááá±á¬ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááááºážááá¯ááºááẠááá¯ážááŸááºážáá±á¬áá»ááºážááŒá±á¬ááºážáá¯ááºáá¯ááºááŸá¯áá®áá»áŸááŒááºážá¡á¬áž ááŒá±ááŸááºážááẠáá»ááºážáááºááŸá¯áá¯á¶ážáá¯ááá¯ááœá²ááŒááºážá áááºááŒá¬áááºááŒá áºáá±á¬ááŒá±á¬áá·áºá "ááá¯ááºááá¯ááºáá±ážáá¬ážáá±á¬" áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠáá¯á¶áá±á¬ááºáá«áááºá
á á¬áá± (áá«ááŸááá¯ááº)
1. Linear áá¯ááºáá¯ááºááŸá¯
2. á¡áááºážáá¯á¶áž ááŸá áºáááºáááºážáááºáž
3. áááºážáááºáá¬áááºá
áá
5. Gradient áá»áá¯ážááœááº
6. NumPy á á¬ááŒáá·áºááá¯ááº
source: www.habr.com

О
. áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœááºá áá¯áááŸáá·áºáá®ážáá±á¬ ááááºážáá»á¬ážááᯠáááºááŸááºáá«áááºá á€áááºááŸá¬ áá¬áááºá¡áá±á·á¡áá»áá·áºáá
áºáá¯ááŒá
áºáá±á¬áºáááºáž ááá
á¹á
áá
áºáá¯á
á®ááœáẠáááºážáááá¯ááºááá¯ááºá¡áá±á·á¡áá»áá·áºááŸáááá¯ááºáááºá
á¡ááŸááºááœáẠ1st order partial derivative ááááºááá¯ážááᯠáá¯ááºáá«á
. áá®áá±á¬á· derivative á positive ááá¯ááẠfunction á ááá¯ážáá¬áá«áááºá ááá¯á·ááŒá±á¬áá·áºá áááºážáááºááŒááºážááááºááá¯ážááᯠáá¯ááºááŒááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠááŒá®ážááœá¬ážááŸá¯á ááá·áºáá»ááºáááºáŠážáááºáá»ááºááŒá
áºáá±á¬ áááºážáááºáá¬áááºážááŒá±á¬ááºážááá¯á· ááœá±á·ááœá¬ážáá«áááºá derivative ááẠnegative ááŒá
áºáá±áá«áá á€á¡ááŸááºááœáẠfunction ááẠáá»áááºážááœá¬ážááŒá®áž derivative ááááºááá¯ážááᯠáá¯ááºááŒááºážááŒáá·áº áááºážáááºááŒááºážáá®ááá¯á· áŠážáááºááœá¬ážáá«áááºá
: á¡ááŸááºááœáẠáá
áºá
áááºáá
áºááá¯ááºáž áááºážáááºááŒááºážá áááºááá¯ážááᯠáá¯ááºáá«á
.
О
ááááááºááá¹ááá¬áá»á¬ážá áááºááá¯ážáá»á¬ážááᯠáá¯ááºáá«á áá»áœááºá¯ááºááá¯á·ááẠááŒááááááºá¡áá
áºáá»á¬ážááᯠááá°áááºá
О
. áá»áœááºá¯ááºááá¯á·ááẠááœááºáá»ááºáá¬ážáá±á¬ ááŒááááááºáá»á¬ážá០ááŒá®ážáá±á¬ áá±á¬ááºáá
áºááá·áº (á¡áá¯ááº) ááᯠáá°áááºá ááá¯á·ááŒá±á¬áá·áº ááá¯á¡ááºáá±á¬ áá±á«ááºážá
ááºážááŸá¯ áááŒá®ážááá»ááºáž áá¶ááá¬ááẠá¡áááºááẠá¡áááºááẠá
áááºáááºá