ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ
ΡΠ΅ΡΠ΅ΠΉ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΡΠ΅Π΄ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠΎΡΠΈΠ½Π³Π°
ROC-ΠΊΡΠΈΠ²Π°Ρ (Receiver Operator Characteristic) — ΠΊΡΠΈΠ²Π°Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π² ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠΈ. ΠΡΠ° ΠΊΡΠΈΠ²Π°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΠΏΠΎΡΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΠΎΠ»Π΅ΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² («Ρ ΠΎΡΠΎΡΠΈΠΉ» Π·Π°Π΅ΠΌΡΠΈΠΊ) ΠΈ Π΄ΠΎΠ»Π΅ΠΉ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² («ΠΏΠ»ΠΎΡ ΠΎΠΉ» Π·Π°Π΅ΠΌΡΠΈΠΊ). Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ ΡΠ΅ΡΠ΅ΠΉ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΡΠ΅Π΄ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠΎΡΠΈΠ½Π³Π° (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠΎΡΠΌΠ΅ .csv ΡΠ°ΠΉΠ»Π° Ρ Π΄Π²ΡΠΌΡ ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ Π½Π° ΡΠ΅ΡΠ²ΠΈΡΠ΅ kaggle ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Ρ ΡΡΠ°Π»ΠΎΠ½Π½ΡΠΌΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΈΠ΄Π΅Π½ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠ°Π²Π΄ΠΎΠΏΠΎΠ΄ΠΎΠ±ΠΈΡ (ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅Π°Π»ΡΠ½ΡΠΌ).
Π€ΠΎΡΠΌΠ° Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ:
https://www.kaggle.com/c/GiveMeSomeCredit/submit.
ROC-ΠΊΡΠΈΠ²Π°Ρ (Receiver Operator Characteristic) — ΠΊΡΠΈΠ²Π°Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π² ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠΈ. ΠΡΠ° ΠΊΡΠΈΠ²Π°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΠΏΠΎΡΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΠΎΠ»Π΅ΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² («Ρ ΠΎΡΠΎΡΠΈΠΉ» Π·Π°Π΅ΠΌΡΠΈΠΊ) ΠΈ Π΄ΠΎΠ»Π΅ΠΉ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² («ΠΏΠ»ΠΎΡ ΠΎΠΉ» Π·Π°Π΅ΠΌΡΠΈΠΊ).
Π£ΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠ°Π²Π΄ΠΎΠΏΠΎΠ΄ΠΎΠ±ΠΈΡ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ»ΠΎΡΠ°Π΄Ρ ΠΏΠΎΠ΄ ROC-ΠΊΡΠΈΠ²ΠΎΠΉ. ΠΠ½ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅Π½ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ, ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΠ½ΠΎ, ΠΈ Π΄ΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
Π£ΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠ°Π²Π΄ΠΎΠΏΠΎΠ΄ΠΎΠ±ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π² ΡΠ°Π±ΠΎΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠΎΡΠΈΠ½Π³ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΡΡΠ°Π²ΠΈΠ» 0.813 272.
ΠΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈ:
Π’Π°Π±Π»ΠΈΡΠ° 4. Π‘ΡΠ΅Π· ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ· ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ 2
nEpochs. | mu. | nHidden. | nOutput. | last_los_train. | last_los_val. | sr_error. | ||
0.040. | 0.497. | 0.521. | 0.555. |
27.431 ΡΠ΅ΠΊΡΠ½Π΄.
ΠΡΠ²ΠΎΠ΄Ρ. ΠΠΎΠ΄Π²ΠΎΠ΄Ρ ΠΈΡΠΎΠ³, Π±Π°Π½ΠΊΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΡΠΈΡΠΎΠΊΠΈΠΌ ΡΠΏΠ΅ΠΊΡΡΠΎΠΌ ΡΠΈΡΠΊΠΎΠ² Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π±Π°Π½ΠΊΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ² ΠΏΡΡΠ΅ΠΌ Π²ΡΠ΄Π°ΡΠΈ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΠΊΡΠ΅Π΄ΠΈΡΠΎΠ² ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π»ΠΈΡΠ°ΠΌ ΠΈ ΡΡΠΈΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΡΠ΅Π½ΠΊΠ° ΠΊΡΠ΅Π΄ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΎΠΌ ΡΠ΅ΠΊΡΠΎΡΠ΅. ΠΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π±Π°Π½ΠΊΠ° ΡΠ°ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΎΡΠ΅Π½ΠΊΠΈ. ΠΠ΅Π²Π΅ΡΠ½Π°Ρ ΠΎΡΠ΅Π½ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π΄Π΅ΡΠΎΠ»ΡΡ ΠΏΠΎ ΠΊΡΠ΅Π΄ΠΈΡΠ°ΠΌ, ΡΡΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΈΡΡ Π»ΠΈΠΊΠ²ΠΈΠ΄Π½ΠΎΡΡΡ Π±Π°Π½ΠΊΠ° ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΏΠ»Π°ΡΠ΅ΠΆΠ΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΊΡΠ΅Π΄ΠΈΡΠ½ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π±Π°Π½ΠΊΠΈ ΠΏΡΠΈΠ΄Π°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΊΡΠ΅Π΄ΠΈΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ.
Π Π°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π΅ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ ΡΠ΅ΡΠ΅ΠΉ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Ρ ΡΠΈΠΏΠΎΠΌ ΡΠ΅ΡΠΈ: ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠΉΠ½ΡΠΉ ΠΏΠ΅ΡΡΠ΅ΠΏΡΡΠΎΠ½ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΊΡΡΡΡΠΌ ΡΠ»ΠΎΠ΅ΠΌ. ΠΠ΅ΠΉΡΠΎΠ½Π½Π°Ρ ΡΠ΅ΡΡ ΠΎΠ±ΡΡΠ°Π΅ΡΡΡ ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΠΎ Π΄Π΅Π²ΡΡΠΈ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ°ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π±Π°Π½ΠΊΠ°.
ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 0.813 272, Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ — 27.431 ΡΠ΅ΠΊΡΠ½Π΄.
Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΠΈ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠΈ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π·Π°Π΄Π°ΡΠ°Ρ , Π³Π΄Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΠ΅ΡΠΏΠΎΠ½Π΄Π΅Π½ΡΠΎΠ² Π½Π° Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΡΡΠΎΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π·Π°Π΄Π°ΡΠΈ ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΎΠΉ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ, ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠΏΠ°ΠΌΠ°, ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠΎΡΡΠΈΠ²Π½ΡΡ ΡΡΠ°Π²ΠΎΠΊ ΠΈ Ρ. Π΄.
ΠΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠΈ Ρ ΠΎΠ±ΡΡΠ°ΡΡΠ΅ΠΉ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΠΎΠΉ Π²ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ Π±ΡΠ» ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π³ΡΠ°ΡΠΈΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ:
Π ΠΈΡ.4 ΠΡΠΈΠ±ΠΊΠΈ Π½Π° ΠΎΠ±ΡΡΠ°ΡΡΠ΅ΠΉ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΠΎΠΉ Π²ΡΠ±ΠΎΡΠΊΠ°Ρ .
Π ΠΈΡ.5 Π Π°Π·Π½ΠΈΡΠ° Π² Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΡΠ΅ΡΡΡ ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌΠΈ.
ΠΠ ΠΠΠΠΠΠΠΠ 1
ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Python:
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import csv
import pickle
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import sys
df1 = pd.read_csv ('cs-training.csv')
df1 = df1.drop ('Unnamed: 0', 1)
df2 = pd.read_csv ('cs-test.csv')
df1.info ()
df1.corr ()
sns.heatmap (df1.corr ());
df1[df1['NumberOfDependents']. apply (np.isnan)]
df1.head ()
quant_features = ['RevolvingUtilizationOfUnsecuredLines', 'NumberOfTime30−59DaysPastDueNotWorse', 'DebtRatio', 'MonthlyIncome', 'NumberOfOpenCreditLinesAndLoans', 'NumberOfTimes90DaysLate', 'NumberRealEstateLoansOrLines', 'NumberOfTime60−89DaysPastDueNotWorse', 'NumberOfDependents']
scaled_features = {}
for each in quant_features:
mean, std = df1[each]. mean (), df1[each]. std ()
min, max = df1[each]. min (), df1[each]. max ()
scaled_features[each] = [min, max]
df1.loc[, each] = (df1[each] - min)/ (max - min)
df1.head ()
nTrain = 60 000
nTest = 6000
nVal = 6000
b = {}
test_data = df1[-nTest:]
data = df1[:-nTest]
target_fields = [' SeriousDlqin2yrs']
features, targets = df1.drop (target_fields, axis=1), df1[target_fields]
test_features, test_targets = test_data.drop (target_fields, axis=1), test_data[target_fields]
train_features, train_targets = features[:nTrain], targets[:nTrain]
val_features, val_targets = features[-nVal:], targets[-nVal:]
class NN (object):
def __init__(self, nInput, nHidden, nOutput, mu):
self.nInput = nInput
self.nHidden = nHidden
self.nOutput = nOutput
# Initialize weights
self.weights_input_to_hidden = np.random.normal (0.0, self.nHidden**-0.5,
(self.nHidden, self.nInput))
self.weights_hidden_to_output = np.random.normal (0.0, self.nOutput**-0.5,
(self.nOutput, self.nHidden))
self.mu = mu
self.actFun = lambda x: 1.0 / (1.0 + np.exp (-x))
def actFun (x):
return 1.0 / (1.0 + np.exp (-x))
def learn (self, inputs_list, targets_list):
inputs = np.array (inputs_list, ndmin=2).T
targets = np.array (targets_list, ndmin=2).T
### Forward pass ###
# Hidden layer
hidden_inputs = np.dot (self.weights_input_to_hidden, inputs)
hidden_outputs = self.actFun (hidden_inputs)
#Output layer
final_inputs = np.dot (self.weights_hidden_to_output, hidden_outputs)
final_outputs = final_inputs
### Backward pass ###
# Output error
output_errors = targets - final_outputs
# Backpropagated error
hidden_errors = np.dot (self.weights_hidden_to_output.T, output_errors)
hidden_grad = hidden_outputs * (1.0 - hidden_outputs)
# Update the weights
self.weights_hidden_to_output += self.mu * np.dot (output_errors, hidden_outputs.T)
self.weights_input_to_hidden += self.mu * np.dot ((hidden_errors * hidden_grad), inputs.T)
def check (self, inputs_list):
# Run a forward pass through the network
inputs = np.array (inputs_list, ndmin=2).T
### forward pass here ###
# Hidden layer
hidden_inputs = np.dot (self.weights_input_to_hidden, inputs)
hidden_outputs = self.actFun (hidden_inputs)
# Output layer
final_inputs = np.dot (self.weights_hidden_to_output, hidden_outputs)
final_outputs = final_inputs
return final_outputs
def error (y_t, y):
return np.mean ((y_t-y)**2)
np.random.seed (42)
nEpochs = 1000
mu = 0.02
nHidden = 10
nOutput = 1
nTuplesPerEpoch = 100
nInputs = train_features.shape[1]
network = NN (nInputs, nHidden, nOutput, mu)
losses = {'train':[], 'validation':[]}
def start (nEpochs):
for e in range (nEpochs):
batch = np.random.choice (train_features.index, size=nTuplesPerEpoch)
for record, target in zip (train_features.ix[batch]. values, train_targets.ix[batch]['age']):
network.learn (record, target)
train_loss = error (network.check (train_features), train_targets['age']. values)
val_loss = error (network.check (val_features), val_targets['age']. values)
sys.stdout.write («ΠΡΠΎΡΠ΅ΡΡ: » + str (100 * e/float (nEpochs))[:4]
+ " % ΠΡΠΈΠ±ΠΊΠ° ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ: " + str (train_loss)[:10]
+ " ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ: " + str (val_loss)[:10])
losses['train']. append (train_loss)
losses['validation']. append (val_loss)
tab = nEpochs, mu, nHidden, nOutput, losses['train'][-1], losses['validation'][-1]
f = open ('info.txt', 'a')
for item in tab:
f.write («%s » % item)
f.write (' ')
f.close
start (nEpochs)
plt.rcParams['figure.figsize'] = (20,8)
plt.plot (losses['train'], label='Train error')
plt.plot (losses['validation'], label='Validation error')
plt.ylim (ymax=0.008)
plt.ylim (ymin=0)
plt.xlim (xmax=900)
plt.legend ()
fig, ax = plt.subplots (figsize=(20,8))
min, max = scaled_features['SeriousDlqin2yrs']
predictions = network.check (test_features) * (max - min) + min
ax.plot (predictions[0], label='Prediction')
ax.plot ((test_targets['SeriousDlqin2yrs'] * (max - min) + min).values, label='Data')
plt.xlim (xmin=10)
plt.xlim (xmax=790)
#plt.xlim (xmin=0)
ax.legend ()
ΠΠ ΠΠΠΠΠΠΠΠ 2
Π’Π°Π±Π»ΠΈΡΠ° ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ:
nEpochs. | mu. | nHidden. | nOutput. | last_los_train. | last_los_val. | sr_error. | ||
0.005. | 0.479. | 0.503. | 0.849. | |||||
0.005. | 0.478. | 0.502. | 0.1 980. | |||||
0.005. | 0.685. | 0.710. | 0.2 457. | |||||
0.005. | 0.491. | 0.516. | 0.692. | |||||
0.005. | 0.532. | 0.556. | 0.2 401. | |||||
0.005. | 0.527. | 0.552. | 0.1 000. | |||||
0.005. | 0.521. | 0.545. | 0.797. | |||||
0.005. | 0.525. | 0.553. | 0.2 580. | |||||
0.005. | 0.495. | 0.518. | 0.2 008. | |||||
0.020. | 0.485. | 0.509. | 0.562. | |||||
0.010. | 0.484. | 0.508. | 0.599. | |||||
0.030. | 0.484. | 0.508. | 0.556. | |||||
0.060. | 0.483. | 0.506. | 0.578. | |||||
0.040. | 0.484. | 0.507. | 0.560. | |||||
0.040. | 0.498. | 0.519. | 0.594. | |||||
0.040. | 0.547. | 0.574. | 0.673. | |||||
0.040. | 0.497. | 0.521. | 0.555. | |||||