ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. 
РСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ классификации с использованиСм Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠ³ΠΎ скоринга

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

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.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ