Π ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π»ΠΈΠ½ΠΈΠΈ ΠΏΡΠΎΡΡΠΎΠΉ (ΠΏΠ°ΡΠ½ΠΎΠΉ) ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ.
ΠΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π·Π΄Π΅ΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π΅ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ². ΠΠ±ΠΎΠ·Π½Π°ΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
- ΠΠ½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
- ΠΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ
- Π‘ΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΡΡΠΌΠΎΠΉ, Π² ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄Π΅Π»ΡΡΡΡ Π½Π° ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ NumPy ΠΈ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ°ΡΡΠ΅ΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ NumPy. Π‘ΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΡΠΌΠ΅Π»ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ NumPy ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π·Π°ΡΡΠ°ΡΡ Π½Π° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
ΠΠ΅ΡΡ ΠΊΠΎΠ΄, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π² ΡΡΠ°ΡΡΠ΅, Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ python 2.7 Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Jupyter Notebook. ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΡΠ°ΠΉΠ» Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π²ΡΠ±ΠΎΡΠΊΠΈ Π²ΡΠ»ΠΎΠΆΠ΅Π½ Π½Π°
Π‘ΡΠ°ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ Π½Π° Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ , ΡΠ°ΠΊ ΠΈ Π½Π° ΡΠ΅Ρ , ΠΊΡΠΎ ΡΠΆΠ΅ ΠΏΠΎΠ½Π΅ΠΌΠ½ΠΎΠ³Ρ Π½Π°ΡΠ°Π» ΠΎΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΌΠ° ΠΎΠ±ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° Π² ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΠ΅ β ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ.
ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ.
Π£ΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°
Π£ Π½Π°Ρ Π΅ΡΡΡ ΠΏΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Y ΠΎΡ X (Π’Π°Π±Π»ΠΈΡΠ° β1):
Π’Π°Π±Π»ΠΈΡΠ° β1 Β«Π£ΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Β»
ΠΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ β ΡΡΠΎ ΠΌΠ΅ΡΡΡ Π³ΠΎΠ΄Π°, Π° β Π²ΡΡΡΡΠΊΠ° Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΡΠ΅. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²ΡΡΡΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ΅ΡΡΡΠ° Π³ΠΎΠ΄Π°, Π° β Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠΈΠ·Π½Π°ΠΊ, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π²ΠΈΡΠΈΡ Π²ΡΡΡΡΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊ ΡΠ΅Π±Π΅, ΠΊΠ°ΠΊ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²ΡΡΡΡΠΊΠΈ ΠΎΡ ΠΌΠ΅ΡΡΡΠ° Π³ΠΎΠ΄Π°, ΡΠ°ΠΊ ΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ β ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ, ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΠ°Π»ΡΡΠ°Ρ , ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Ρ Π»Π΅Π³ΠΊΠΎΡΡΡΡ, ΡΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌΡΠΉ Π½ΠΎΠ²ΠΈΡΠΊΠ°ΠΌΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π». Π ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΡΠΎΡΠ° ΡΠΈΡΠ΅Π» ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π±Π΅Π· Π²Π΅ΡΠΎΠΌΡΡ ΡΡΡΠ΄ΠΎΠ·Π°ΡΡΠ°Ρ, ΠΆΠ΅Π»Π°ΡΡΠΈΠΌ, ΠΏΠΎΡΠ΅ΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° Β«Π±ΡΠΌΠ°Π³Π΅Β».
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠΈΡΠΎΠ²Π°Π½Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ Π»ΠΈΠ½ΠΈΠΈ ΠΏΡΠΎΡΡΠΎΠΉ (ΠΏΠ°ΡΠ½ΠΎΠΉ) ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ Π²ΠΈΠ΄Π°:
Π³Π΄Π΅ β ΡΡΠΎ ΠΌΠ΅ΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ»Π° ΠΏΠΎΠ»ΡΡΠ΅Π½Π° Π²ΡΡΡΡΠΊΠ°, β Π²ΡΡΡΡΠΊΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΌΠ΅ΡΡΡΡ, ΠΈ β ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ ΠΎΡΠ΅Π½Π΅Π½Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ.
ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠ³Π»ΠΎΠ²ΡΠΌ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠΌ ΠΈΠ»ΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΎΠΌ ΠΎΡΠ΅Π½Π΅Π½Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ; ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ .
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ β ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°ΡΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΈ , ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ Π½Π°ΡΠΈΡ ΡΠ°ΡΡΠ΅ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΡΡΡΡΠΊΠΈ ΠΏΠΎ ΠΌΠ΅ΡΡΡΠ°ΠΌ ΠΎΡ ΠΈΡΡΠΈΠ½Π½ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ², Ρ.Π΅. Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π² Π²ΡΠ±ΠΎΡΠΊΠ΅, Π±ΡΠ΄ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Ρ.
ΠΠ΅ΡΠΎΠ΄ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ²
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ², ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΈΡ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ, Π²ΠΎΠ·Π²ΠΎΠ΄Ρ Π΅Π³ΠΎ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΡΠΈΠ΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ³Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ, Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ +5 (ΠΏΠ»ΡΡ ΠΏΡΡΡ), Π° Π² Π΄ΡΡΠ³ΠΎΠΌ -5 (ΠΌΠΈΠ½ΡΡ ΠΏΡΡΡ), ΡΠΎ ΡΡΠΌΠΌΠ° ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΏΠΎΠ³Π°ΡΠΈΡΡΡ ΠΈ ΡΠΎΡΡΠ°Π²ΠΈΡ 0 (Π½ΠΎΠ»Ρ). ΠΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ, Π° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΡΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π²ΡΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΈ Π±ΡΠ΄ΡΡ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡΡΡΡ. ΠΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π° ΡΡΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ, Π° ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΠΌ, ΡΡΠΎ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ°ΡΡΠ΅ΡΠΎΠ², ΠΏΡΠΈΠ½ΡΡΠΎ Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ.
ΠΠΎΡ ΡΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠΎΡΠΌΡΠ»Π°, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΡΡ ΡΡΠΌΠΌΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ (ΠΎΡΠΈΠ±ΠΊΠΈ):
Π³Π΄Π΅ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠ°ΡΠΈΠΈ ΠΈΡΡΠΈΠ½Π½ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ² (ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΡΡΠΈΡΠ°Π½Π½Π°Ρ Π½Π°ΠΌΠΈ Π²ΡΡΡΡΠΊΠ°),
β ΡΡΠΎ ΠΈΡΡΠΈΠ½Π½ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ (ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ Π² Π²ΡΠ±ΠΎΡΠΊΠ΅ Π²ΡΡΡΡΠΊΠ°),
β ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ Π²ΡΠ±ΠΎΡΠΊΠΈ (Π½ΠΎΠΌΠ΅Ρ ΠΌΠ΅ΡΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ)
ΠΡΠΎΠ΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΈ Π±ΡΠ΄Π΅ΠΌ Π³ΠΎΡΠΎΠ²Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΊΡΠΊΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΌΡΡΠ» ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ.
ΠΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ»Ρ ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ? ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°ΠΌ Π΅Π΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½Π°, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ, Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΡΡΠ½ΠΊΡΠΈΡ ΡΠ±ΡΠ²Π°Π΅Ρ. Π ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ΅ΠΌ Π²ΡΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΡΡΡΠ΅ ΡΠ³ΠΎΠ» Π½Π°ΠΊΠ»ΠΎΠ½Π° Π³ΡΠ°ΡΠΈΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ Π΄Π΅ΠΊΠ°ΡΡΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ Π² ΡΠΎΡΠΊΠ΅ M(0,0) ΡΠ°Π²Π½ΠΎΠ΅ +25 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠ΅, ΠΏΡΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΠΏΡΠ°Π²ΠΎ Π½Π° ΡΡΠ»ΠΎΠ²Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ Π½Π° 25 ΡΡΠ»ΠΎΠ²Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ. ΠΠ° Π³ΡΠ°ΡΠΈΠΊΠ΅ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ, ΠΊΠ°ΠΊ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΊΡΡΡΠΎΠΉ ΡΠ³ΠΎΠ» ΠΏΠΎΠ΄ΡΠ΅ΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ.
ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π²Π½ΠΎΠ΅ -0,1 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π½Π° ΠΎΠ΄Π½Ρ ΡΡΠ»ΠΎΠ²Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ±ΡΠ²Π°Π΅Ρ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π½Π° 0,1 ΡΡΠ»ΠΎΠ²Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ, Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π΅Π΄Π²Π° Π·Π°ΠΌΠ΅ΡΠ½ΡΠΉ Π½Π°ΠΊΠ»ΠΎΠ½ Π²Π½ΠΈΠ·. ΠΡΠΎΠ²ΠΎΠ΄Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ Π³ΠΎΡΠΎΠΉ, ΡΠΎ ΠΌΡ ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ ΠΏΠΎ ΠΏΠΎΠ»ΠΎΠ³ΠΎΠΌΡ ΡΠΊΠ»ΠΎΠ½Ρ Ρ Π³ΠΎΡΡ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π³Π΄Π΅ Π½Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π±ΡΠ°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΊΡΡΡΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ:)
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΎΠ²Π΅Π΄Ρ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠ°ΠΌ ΠΈ , ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ 1-Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°. ΠΠΎΡΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ· Π΄Π²ΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ, ΡΠ΅ΡΠΈΠ² ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΈ , ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Π² Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠΎΡΠΊΠ°Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π° ΠΎΡΠ΅Π½Ρ ΠΈ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, Π° Π² ΡΠ»ΡΡΠ°Π΅ Ρ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π²ΠΎΠ²ΡΠ΅. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠ°Ρ Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Π² ΡΡΠΈΡ ΡΠΎΡΠΊΠ°Ρ Π±ΡΠ΄ΡΡ ΡΠ°Π²Π½Ρ Π½ΡΠ»Ρ.
ΠΡΠ°ΠΊ, ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ 1-Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΏΠΎ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΈΠ΄:
ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ 1-Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΏΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΈΠ΄:
Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:
begin{equation*}
begin{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
end{cases}
end{equation*}
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ΅ΡΠ°ΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΠΌ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΎΡΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π° Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π΄Π»Ρ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ°, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ΄ Π² Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°ΡΠΈΡΡ : Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ 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 '********************************************'
ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
Π’Π΅ΠΏΠ΅ΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅, Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΎΡΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ. Π§Π°ΡΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ pairplot Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Seaborn. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π²Π²ΠΈΠ΄Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΡΡΠΈ ΡΠΈΡΡ Π½Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Seaborn. ΠΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Matplotlib ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ ΡΠ°ΡΡΠ΅ΡΠ½ΠΈΡ.
ΠΠΎΠ΄ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ ΡΠ°ΡΡΠ΅ΡΠ½ΠΈΡ
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 Β«ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π²ΡΡΡΡΠΊΠΈ ΠΎΡ ΠΌΠ΅ΡΡΡΠ° Π³ΠΎΠ΄Π°Β»
ΠΠ½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ°ΠΌΡΠΌΠΈ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π² python ΠΈ ΡΠ΅ΡΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ:
begin{equation*}
begin{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
end{cases}
end{equation*}
ΠΠΎ ΠΏΡΠ°Π²ΠΈΠ»Ρ ΠΡΠ°ΠΌΠ΅ΡΠ° Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΎΠ±ΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ ΠΏΠΎ ΠΈ ΠΏΠΎ , ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ, ΡΠ°Π·Π΄Π΅Π»ΠΈΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΏΠΎ Π½Π° ΠΎΠ±ΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ β Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ , Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ .
ΠΠΎΠ΄ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ
# ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ°ΡΡΠ΅ΡΠ° ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² 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)
ΠΠΎΡ, ΡΡΠΎ Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ:
ΠΡΠ°ΠΊ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² Π½Π°ΠΉΠ΄Π΅Π½Ρ, ΡΡΠΌΠΌΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°. ΠΠ°ΡΠΈΡΡΠ΅ΠΌ Π½Π° Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ°ΡΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΡΠΌΡΡ Π»ΠΈΠ½ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΌΠΈ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠ°ΠΌΠΈ.
ΠΠΎΠ΄ Π»ΠΈΠ½ΠΈΠΈ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ
# ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ°ΡΡΡΠ΅ΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΡΡΡΡΠΊΠΈ
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 Β«ΠΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ, %Β»
ΠΠ΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ, Π½ΠΎ Π½Π°ΡΡ Π·Π°Π΄Π°ΡΡ ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ.
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NumPy, ΡΠΎΡΠ½Π΅Π΅ β Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ: ΠΎΠ΄Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅Π²Π΄ΠΎΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ (Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΈ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ), Π΄ΡΡΠ³ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ.
ΠΠΎΠ΄ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ (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_np
Π‘ΡΠ°Π²Π½ΠΈΠΌ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ Π·Π°ΡΡΠ°ΡΠ΅Π½ΠΎ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΈ , Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ 3-ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ.
ΠΠΎΠ΄ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ°ΡΡΠ΅ΡΠΎΠ²
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)
ΠΠ° Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π΄Π°Π½Π½ΡΡ
, Π²ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΡ
ΠΎΠ΄ΠΈΡ Β«ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½Π°ΡΒ» ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΡΠ°ΠΌΠ΅ΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΈ .
ΠΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ. ΠΠΎ-ΠΏΡΠΎΡΡΠΎΠΌΡ, Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ β ΡΡΠΎ ΠΎΡΡΠ΅Π·ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΠΏΠΎΠ΄ΡΠ΅ΠΌΠΎΠΌ Π² Π³ΠΎΡΡ, ΡΠΎ ΠΊΡΠ΄Π° ΡΠΌΠΎΡΡΠΈΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ, ΡΠ°ΠΌ ΠΈ Π΅ΡΡΡ ΡΠ°ΠΌΡΠΉ ΠΊΡΡΡΠΎΠΉ ΠΏΠΎΠ΄ΡΠ΅ΠΌ ΠΊ Π²Π΅ΡΡΠΈΠ½Π΅ Π³ΠΎΡΡ. Π Π°Π·Π²ΠΈΠ²Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ Ρ Π³ΠΎΡΠΎΠΉ, Π²ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠ°ΠΌΡΠΉ ΠΊΡΡΡΠΎΠΉ ΡΠΏΡΡΠΊ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅ Π΄ΠΎΡΡΠΈΡΡ Π½ΠΈΠ·ΠΈΠ½Ρ, ΡΠΎ Π΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° β ΠΌΠ΅ΡΡΠ° Π³Π΄Π΅ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ ΠΈ Π½Π΅ ΡΠ±ΡΠ²Π°Π΅Ρ. Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π½Π΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ, Π° Π°Π½ΡΠΈΠ³ΡΠ°Π΄ΠΈΠ΅Π½Ρ. ΠΠ»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π°Π½ΡΠΈΠ³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΌΠ½ΠΎΠΆΠΈΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ Π½Π° -1 (ΠΌΠΈΠ½ΡΡ ΠΎΠ΄ΠΈΠ½).
ΠΠ±ΡΠ°ΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠΎΠ², ΠΈ ΠΎΠΏΡΡΡΠΈΠ²ΡΠΈΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ ΠΏΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡ Π΄Π°Π»Π΅Π΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΌΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½ΠΈΠΆΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ. Π Π°ΡΡΠ»Π°Π±ΠΈΠΌΡΡ, Π½Π°ΠΌ ΡΡΠΎ Π½Π΅ Π³ΡΠΎΠ·ΠΈΡ! Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠΎΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΠ°ΡΠ°Π±ΠΎΠ»Ρ. Π ΠΊΠ°ΠΊ ΠΌΡ Π²ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ Π·Π½Π°ΡΡ ΠΈΠ· ΡΠΊΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΊΡΡΡΠ° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ β Ρ ΠΏΠ°ΡΠ°Π±ΠΎΠ»Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ Π²ΡΡΡΠ½ΠΈΠ»ΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎ, ΡΡΠΎ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ β ΡΡΠΎ ΠΎΡΡΠ΅Π·ΠΎΠΊ, ΡΠΎ Π΅ΡΡΡ Π²Π΅ΠΊΡΠΎΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΠΌΠΈ ΡΠ°ΠΌΡΠΌΠΈ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ.
ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ± Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ ΡΠΏΡΡΠΊΠ°:
- ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΈ . Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ Π²Π±Π»ΠΈΠ·ΠΈ Π½ΡΠ»Ρ. ΠΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΡΠ²ΠΎΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°.
- ΠΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π²ΡΡΠΈΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ 1-Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π² ΡΠΎΡΠΊΠ΅ . Π’Π°ΠΊ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½Π°Ρ, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΡΠ½ΠΈΠΌΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΡΠΎΡΠΎΠ½Ρ ΡΠΎΡΡΠ°, ΡΠΎ Π΅ΡΡΡ Π² ΡΡΠΎΡΠΎΠ½Ρ ΡΠΏΡΡΠΊΠ°. ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½Π°, Π·Π½Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΡΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΡΠ±ΡΠ²Π°Π΅Ρ ΠΈ ΠΎΡΠ½ΠΈΠΌΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΠΌΡ Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡΡ Π² ΡΡΠΎΡΠΎΠ½Ρ ΡΠΏΡΡΠΊΠ°.
- ΠΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΠΉ : Π²ΡΡΠΈΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ Π² ΡΠΎΡΠΊΠ΅ .
- ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠΊΠΎΡΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈ Π½Π΅ ΡΠ»Π΅ΡΠ΅ΡΡ Π² Π΄Π°Π»Π΅ΠΊΠΈΠΉ ΠΊΠΎΡΠΌΠΎΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π³Π° Π² ΡΡΠΎΡΠΎΠ½Ρ ΡΠΏΡΡΠΊΠ°. Π ΠΎΠ±ΡΠ΅ΠΌ ΠΈ ΡΠ΅Π»ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π»ΡΡ ΡΡΠ°ΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π΅Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π³ ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΏΡΡΠΊΠ°, ΡΡΠΎΠ±Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ Π·Π°ΡΡΠ°ΡΡ Π½Π° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΠΌΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΈ ΠΌΡ Π½Π°ΡΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Β«ΡΡΠΊΠ°Β» ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΡΡ Π² ΠΏΡΠΎΡΡΠΎΠ½Π°ΡΠΎΠ΄ΡΠ΅, ΡΠΌΠΏΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΡΠ΅ΠΌ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π³Π°.
- ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΈ Π²ΡΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ , ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ . ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ (Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅), ΡΠΆΠ΅ ΠΈΠ· ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ. Π ΡΠ°ΠΊ ΡΠΈΠΊΠ» Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π²Π½ΠΎΠ²Ρ ΠΈ Π²Π½ΠΎΠ²Ρ, Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠ° ΡΡΠ΅Π±ΡΠ΅ΠΌΠ°Ρ ΡΡ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ.
ΠΡΠ΅! Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Π½Π° ΠΏΠΎΠΈΡΠΊΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΡΡΠ΅Π»ΡΡ ΠΠ°ΡΠΈΠ°Π½ΡΠΊΠΎΠΉ Π²ΠΏΠ°Π΄ΠΈΠ½Ρ. ΠΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ.
ΠΠΎΠ΄ Π΄Π»Ρ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ°
# Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ° Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ 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
ΠΡ ΠΏΠΎΠ³ΡΡΠ·ΠΈΠ»ΠΈΡΡ Π½Π° ΡΠ°ΠΌΠΎΠ΅ Π΄Π½ΠΎ ΠΠ°ΡΠΈΠ°Π½ΡΠΊΠΎΠΉ Π²ΠΏΠ°Π΄ΠΈΠ½Ρ ΠΈ ΡΠ°ΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ Π²ΡΠ΅ ΡΠ΅ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΈ , ΡΡΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ.
Π‘ΠΎΠ²Π΅ΡΡΠΈΠΌ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠΎΡ ΡΠ°Π·, Π½Π°ΡΠΈΠ½ΠΊΠΎΠΉ Π½Π°ΡΠ΅Π³ΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ²ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ° Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° NumPy.
ΠΠΎΠ΄ Π΄Π»Ρ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ° (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
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΠ»Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΏΡΡΠΊΠ΅, ΡΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΠ»Π°ΡΡ ΡΡΠΌΠΌΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠ°Π³ΠΎΠΌ.
ΠΠΎΠ΄ Π΄Π»Ρ Π³ΡΠ°ΡΠΈΠΊΠ° ΡΡΠΌΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ
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 Β«Π‘ΡΠΌΠΌΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΏΡΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΏΡΡΠΊΠ΅Β»
ΠΠ° Π³ΡΠ°ΡΠΈΠΊΠ΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΠΎΡΠΈΠ±ΠΊΠ° ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ, Π° ΡΠΏΡΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΡ Π»ΠΈΠ½ΠΈΡ.
ΠΠ°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ ΠΎΡΠ΅Π½ΠΈΠΌ ΡΠ°Π·Π½ΠΈΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°:
ΠΠΎΠ΄ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ°
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.
ΠΠΎ ΠΌΡ Π½Π΅ ΡΡΠΎΠΈΠΌ Π½Π° ΠΌΠ΅ΡΡΠ΅, Π° Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡΡ Π² ΡΡΠΎΡΠΎΠ½Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ. ΠΡΡΡΠ΅ΡΠ°ΠΉΡΠ΅!
Π‘ΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π±ΡΡΡΡΠ΅Π΅ ΠΏΠΎΠ½ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ°, Π»ΡΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΅Π³ΠΎ ΠΎΡΠ»ΠΈΡΠΈΡ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ°. ΠΡ, Π² ΡΠ»ΡΡΠ°Π΅ Ρ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΌ ΡΠΏΡΡΠΊΠΎΠΌ, Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΎΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠΌΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΡΠ΅Ρ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΈ ΠΈΡΡΠΈΠ½Π½ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ², ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π² Π²ΡΠ±ΠΎΡΠΊΠ΅ (ΡΠΎ Π΅ΡΡΡ ΡΡΠΌΠΌΡ Π²ΡΠ΅Ρ ΠΈ ). Π ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΏΡΡΠΊΠ΅ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ΡΡ Π² Π²ΡΠ±ΠΎΡΠΊΠ΅, Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π²ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΡΡ Π·Π° Π½ΠΎΠΌΠ΅ΡΠΎΠΌ 3 (ΡΡΠΈ), ΡΠΎ ΠΌΡ Π±Π΅ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ , Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ. ΠΠ°ΡΠ΅ΠΌ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ, ΠΌΡ ΠΎΠΏΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ Π²ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ , ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ ΠΈ Ρ.Π΄. Π΄ΠΎ ΠΏΠΎΠ·Π΅Π»Π΅Π½Π΅Π½ΠΈΡ ΡΡ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡΠ°Π²Π΄Π° ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π΅ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°, Π½ΠΎ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΡ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ.
ΠΠ°ΠΊΠΎΠ²Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±ΡΡΠ½ΡΠΌ? Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΡΠ±ΠΎΡΠΊΠΈ ΠΎΡΠ΅Π½Ρ Π²Π΅Π»ΠΈΠΊ ΠΈ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΡΡΡ Π΄Π΅ΡΡΡΠΊΠ°ΠΌΠΈ ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΡΡΡΡΡ ΠΈΠ· Π½ΠΈΡ , Π½Π΅ΠΆΠ΅Π»ΠΈ Π²ΡΡ Π²ΡΠ±ΠΎΡΠΊΡ. ΠΠΎΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π·Π½ΠΈΡΡ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠΌ.
Π‘ΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ΄.
ΠΠΎΠ΄ Π΄Π»Ρ ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ°
# ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΎΡ
.Π³ΡΠ°Π΄.ΡΠ°Π³Π°
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])
Π‘ΠΌΠΎΡΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π° ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΈ Π»ΠΎΠ²ΠΈΠΌ ΡΠ΅Π±Ρ Π½Π° Π²ΠΎΠΏΡΠΎΡΠ΅ Β«ΠΠ°ΠΊ ΠΆΠ΅ ΡΠ°ΠΊ?Β». Π£ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΈ . ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠΎΡ
Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ Π½Π°ΡΠ΅Π» Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ? Π£Π²Ρ, Π½Π΅Ρ. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΡΠΌΠΌΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΏΡΠΈ Π½ΠΎΠ²ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ
ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ², ΠΎΡΠΈΠ±ΠΊΠ° Π±ΠΎΠ»ΡΡΠ΅. ΠΠ΅ ΡΠΏΠ΅ΡΠΈΠΌ ΠΎΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ. ΠΠΎΡΡΡΠΎΠΈΠΌ Π³ΡΠ°ΡΠΈΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠΎΠ΄ Π΄Π»Ρ Π³ΡΠ°ΡΠΈΠΊΠ° ΡΡΠΌΠΌΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΏΡΠΈ ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΏΡΡΠΊΠ΅
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 Β«Π‘ΡΠΌΠΌΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΏΡΠΈ ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΏΡΡΠΊΠ΅Β»
ΠΠΎΡΠΌΠΎΡΡΠ΅Π² Π½Π° Π³ΡΠ°ΡΠΈΠΊ, Π²ΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π° ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΡΠ° ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΡ Π²ΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΠΌ.
ΠΡΠ°ΠΊ, ΡΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ? ΠΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅. ΠΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠ΅ΡΡΡ, ΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΡΠ° Π½Π°Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΡΡΠ΅ΠΌΠΈΡΡΡ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² ΡΠ°ΡΡΠ΅ΡΠ΅ Π²ΡΡΡΡΠΊΠΈ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ΅ΡΡΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ ΡΠ°ΡΡΠ΅Ρ, Π½ΠΎ ΠΎΡΠΈΠ±ΠΊΡ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΠΌ ΡΠΆΠ΅ Π΄Π»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΡΠ°. Π ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΠΌΠ΅ΡΡΡΠ° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡΡΡ ΠΎΡ Π»ΠΈΠ½ΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ Π΄Π²ΡΡ ΠΌΠ΅ΡΡΡΠ΅Π², ΡΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ , Π½Π°Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΏΠΎ Π²ΡΠ΅ΠΉ Π²ΡΠ±ΠΎΡΠΊΠ΅. Π’Π°ΠΊ ΡΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°ΡΡ? ΠΡΠ²Π΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ: Π½Π°Π΄ΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ°Π³ ΡΠΏΡΡΠΊΠ°. ΠΠ΅Π΄Ρ ΡΠΌΠ΅Π½ΡΡΠΈΠ² ΡΠ°Π³ ΡΠΏΡΡΠΊΠ°, ΠΎΡΠΈΠ±ΠΊΠ° ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½Π΅Ρ Β«ΡΠΊΠ°ΠΊΠ°ΡΡΒ» ΡΠΎ Π²Π²Π΅ΡΡ , ΡΠΎ Π²Π½ΠΈΠ·. ΠΠ΅ΡΠ½Π΅Π΅, ΠΎΡΠΈΠ±ΠΊΠ° Β«ΡΠΊΠ°ΠΊΠ°ΡΡΒ» Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½Π΅Ρ, Π½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ ΡΠ°ΠΊ ΠΏΡΡΡΠΊΠΎ:) ΠΡΠΎΠ²Π΅ΡΠΈΠΌ.
ΠΠΎΠ΄ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° 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 Β«Π‘ΡΠΌΠΌΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΏΡΠΈ ΡΡΠΎΡ
Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΏΡΡΠΊΠ΅ (80 ΡΡΡ. ΡΠ°Π³ΠΎΠ²)Β»
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΡΠ»ΡΡΡΠΈΠ»ΠΈΡΡ, Π½ΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½Ρ. ΠΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ
1000 ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ², Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±ΡΠ»Π° Π΄ΠΎΠΏΡΡΠ΅Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°. ΠΡΠ°Π²Π΄Π° Π½Π°ΠΌ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π΅ΡΠ΅ ΠΈ ΡΠ°ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ². ΠΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ, Π° Π»ΡΡΡΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π³ΡΠ°ΡΠΈΠΊ. ΠΠ½ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π³Π»Π°Π΄ΠΊΠΈΠΌ, ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΠ΅ΡΠ²ΡΠ΅ 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 ΡΠ°Π³ΠΎΠ²)Β»
Π ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ ΡΠΏΡΡΠΊΠ° ΠΌΡ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠ΅ ΠΈ ΠΊΡΡΡΠΎΠ΅ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ
ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ
ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Ρ
ΠΎΠ΄ΠΈΡ Π²ΠΎΠΊΡΡΠ³ Π΄Π° ΠΎΠΊΠΎΠ»ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² 1,475 ΠΈ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π΄Π°ΠΆΠ΅ ΡΠ°Π²Π½ΡΠ΅ΡΡΡ ΡΡΠΎΠΌΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΏΠΎΡΠΎΠΌ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡ
ΠΎΠ΄ΠΈΡ Π²Π²ΡΡΡβ¦ ΠΠΎΠ²ΡΠΎΡΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΈ , Π° ΠΏΠΎΡΠΎΠΌ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ΅, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ
ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°. ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π½Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΡΠ΅ΡΡΠ΅Π·Π½Π΅Π΅: Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ΄Π΅Π»Π°ΡΡ 80 ΡΡΡ. ΡΠ°Π³ΠΎΠ² (ΡΠΌ. ΠΊΠΎΠ΄), ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ ΠΊ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ. Π ΡΡΠΎ, ΡΠΆΠ΅ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΠΈΠ΄Π΅Π΅ ΠΎΠ± ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΏΡΠΈ ΡΡΠΎΡ
Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΏΡΡΠΊΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ. Π§ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ ΠΈ ΡΠ»ΡΡΡΠΈΡΡ? ΠΠ΅ ΡΡΡΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π° ΠΏΠ΅ΡΠ²ΡΡ
ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ
ΠΌΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΠΈΠ΄Π΅ΠΌ Π²Π½ΠΈΠ· ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½Π°ΠΌ ΡΡΠΎΠΈΡ ΠΎΡΡΠ°Π²ΠΈΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π³ Π½Π° ΠΏΠ΅ΡΠ²ΡΡ
ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ
ΠΈ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ Π²ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°Π³ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ. ΠΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ β ΠΎΠ½Π° ΠΈ ΡΠ°ΠΊ ΡΠΆΠ΅ Π·Π°ΡΡΠ½ΡΠ»Π°ΡΡ. ΠΠ΅Π»Π°ΡΡΠΈΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈ ΡΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ Π½Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ π
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NumPy (ΠΈ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠΏΠΎΡΡΠΊΠ°ΡΡΡΡ ΠΎ ΠΊΠ°ΠΌΠ½ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π²ΡΡΠ²ΠΈΠ»ΠΈ ΡΠ°Π½Π½Π΅Π΅)
ΠΠΎΠ΄ Π΄Π»Ρ ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ° (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. ΠΠΏΡΠΎΡΠ΅ΠΌ, ΡΡΠΎ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ.
Π£Π·Π½Π°Π΅ΠΌ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ Ρ Π½Π°Ρ ΡΡΠΎΡ Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠ΅ ΡΠΏΡΡΠΊΠΈ.
ΠΠΎΠ΄ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ 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 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅. ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ ΡΡΠΎΠΌΡ ΡΡΡΡΡΠΈ, Π° ΡΠΎ ΠΈ Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ°. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π²ΡΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡ ΠΈ Π΄Π°ΡΡ ΡΠ±ΠΎΠΉ. Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ ΠΈ Π΅Π³ΠΎ Π²Π°ΡΠΈΠ°ΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½ΠΎ Π²Π΅ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°ΡΡ Π½Π°Ρ ΠΊ ΡΠ΅Π»ΠΈ β ΠΌΠΈΠ½ΠΈΠΌΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ. Π Π½Π° ΡΡΠ΅Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ Π½Π΅ Π²ΠΎΠ»Π½ΡΠΉΡΠ΅ΡΡ β ΠΌΡ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π΅ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠΏΠΎΡΠΎΠ±Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π½Π°ΠΌ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π»ΠΈΠ½Ρ ΡΠ°Π³Π° (ΡΠΎ Π΅ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ).
Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΡΠ΅Π·ΡΠΌΠ΅.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π² ΡΡΠ°ΡΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌ Β«Π΄Π°ΡΠ° ΡΠ°ΠΉΠ½ΡΠΈΡΡΠ°ΠΌΒ» Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠ°ΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ (ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ) Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ.
ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. Π’Π΅ΠΏΠ΅ΡΡ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ±ΡΠ°ΡΡ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ.
Π-ΡΡΠ΅ΡΡΠΈΡ , ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΡΠΈΠ»Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»ΠΈΠ½Ρ ΡΠ°Π³Π° Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ°. ΠΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠ΅Π½Π΅Π±ΡΠ΅Π³Π°ΡΡ. ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΏΠΎΠ΄ΠΌΠ΅ΡΠ΅Π½ΠΎ Π²ΡΡΠ΅, Ρ ΡΠ΅Π»ΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ Π·Π°ΡΡΠ°Ρ Π½Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, Π΄Π»ΠΈΠ½Ρ ΡΠ°Π³Π° ΡΡΠΎΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎ Ρ ΠΎΠ΄Ρ ΡΠΏΡΡΠΊΠ°.
Π-ΡΠ΅ΡΠ²Π΅ΡΡΡΡ , Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Β«ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΠ΅Β» ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π»ΡΡΡΠΈΠΉ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π½Π΅ ΡΠ°ΠΌΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ NumPy. ΠΠΎ ΠΊΠ°ΠΊ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ, Π²ΡΠ²ΠΎΠ΄ Π½Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠΎΠΈΡ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°ΡΡ ΡΠΎΠΌΠ½Π΅Π½ΠΈΡ ΡΡΡΠΎΡΠ²ΡΠΈΠ΅ΡΡ ΠΌΠ½Π΅Π½ΠΈΡ, Π° Ρ Π΄ΡΡΠ³ΠΎΠΉ β Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΡΠΎΠΈΡ Π²ΡΠ΅ ΡΡΠ»ΠΎΠΆΠ½ΡΡΡ β Π½Π°ΠΎΠ±ΠΎΡΠΎΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ. Π ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅Π»Ρ Ρ Π½Π°Ρ Π±ΡΠ»Π° ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ ΡΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Β«ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΡ Β» ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π°ΠΌ Π²ΠΏΠΎΠ»Π½Π΅ Ρ Π²Π°ΡΠΈΠ»ΠΎ.
ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ° (ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΠΎΠ³ΠΎ)
1. ΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΡ
2. ΠΠ΅ΡΠΎΠ΄ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ²
3. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ
4. ΠΡΠ°Π΄ΠΈΠ΅Π½Ρ
5. ΠΡΠ°Π΄ΠΈΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΡΡΠΊ
6. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° NumPy
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com