ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ื”ืžืืžืจ ื“ืŸ ื‘ืžืกืคืจ ื“ืจื›ื™ื ืœืงื‘ื™ืขืช ื”ืžืฉื•ื•ืื” ื”ืžืชืžื˜ื™ืช ืฉืœ ืงื• ืจื’ืจืกื™ื” ืคืฉื•ื˜ (ืžื–ื•ื’).

ื›ืœ ื”ืฉื™ื˜ื•ืช ืœืคืชืจื•ืŸ ื”ืžืฉื•ื•ืื” ื”ื ื“ื•ื ื” ื›ืืŸ ืžื‘ื•ืกืกื•ืช ืขืœ ืฉื™ื˜ืช ื”ืจื™ื‘ื•ืขื™ื ื”ืงื˜ื ื™ื ื‘ื™ื•ืชืจ. ื ืกืžืŸ ืืช ื”ืฉื™ื˜ื•ืช ื‘ืื•ืคืŸ ื”ื‘ื:

  • ืคืชืจื•ืŸ ืื ืœื™ื˜ื™
  • ื™ืจื™ื“ื” ื‘ืฉื™ืคื•ืข
  • ื™ืจื™ื“ื” ื‘ืฉื™ืคื•ืข ืกื˜ื•ื›ืกื˜ื™

ืขื‘ื•ืจ ื›ืœ ืฉื™ื˜ื” ืœืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืงื• ื™ืฉืจ, ื”ืžืืžืจ ืžืกืคืง ืคื•ื ืงืฆื™ื•ืช ืฉื•ื ื•ืช, ื”ืžื—ื•ืœืงื•ืช ื‘ืขื™ืงืจ ืœืืœื• ืฉื ื›ืชื‘ื•ืช ืœืœื ืฉื™ืžื•ืฉ ื‘ืกืคืจื™ื” ืจื“ื•ื ื•ืืœื” ืฉืžืฉืชืžืฉื™ื ืœื—ื™ืฉื•ื‘ื™ื ืจื“ื•ื. ื”ื•ื ื”ืืžื™ืŸ ื›ื™ ืฉื™ืžื•ืฉ ืžื™ื•ืžืŸ ืจื“ื•ื ื™ืงื˜ื™ืŸ ืืช ืขืœื•ื™ื•ืช ื”ืžื—ืฉื•ื‘.

ื›ืœ ื”ืงื•ื“ ืฉื ื™ืชืŸ ื‘ืžืืžืจ ื›ืชื•ื‘ ื‘ืฉืคื” ืคื™ืชื•ืŸ 2.7 ืขื ืžื—ื‘ืจืช ืฆื“ืง. ืงื•ื“ ื”ืžืงื•ืจ ื•ื”ืงื•ื‘ืฅ ืขื ื ืชื•ื ื™ื ืœื“ื•ื’ืžื” ืžืคื•ืจืกืžื™ื ื‘ Github

ื”ืžืืžืจ ืžื›ื•ื•ืŸ ื™ื•ืชืจ ื”ืŸ ืœืžืชื—ื™ืœื™ื ื•ื”ืŸ ืœืืœื• ืฉื›ื‘ืจ ื”ื—ืœื• ืœื”ืฉืชืœื˜ ื‘ื”ื“ืจื’ื” ื‘ืœื™ืžื•ื“ ืงื˜ืข ืจื—ื‘ ืžืื•ื“ ื‘ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช - ืœืžื™ื“ืช ืžื›ื•ื ื”.

ื›ื“ื™ ืœื”ืžื—ื™ืฉ ืืช ื”ื—ื•ืžืจ, ืื ื• ืžืฉืชืžืฉื™ื ื‘ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ืžืื•ื“.

ืชื ืื™ื ืœื“ื•ื’ืžื”

ื™ืฉ ืœื ื• ื—ืžื™ืฉื” ืขืจื›ื™ื ื”ืžืืคื™ื™ื ื™ื ืชืœื•ืช Y ืž X (ื˜ื‘ืœื” ืžืก' 1):

ื˜ื‘ืœื” ืžืก' 1 "ืชื ืื™ื ืœื“ื•ื’ืžื”"

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ื ื ื™ื— ืฉื”ืขืจื›ื™ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื”ื•ื ื—ื•ื“ืฉ ื”ืฉื ื”, ื• ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” - ื”ื›ื ืกื•ืช ื”ื—ื•ื“ืฉ. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ื”ื”ื›ื ืกื” ืชืœื•ื™ื” ื‘ื—ื•ื“ืฉ ื‘ืฉื ื”, ื•ื›ืŸ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” - ื”ืกื™ืžืŸ ื”ื™ื—ื™ื“ ืฉื‘ื• ืชืœื•ื™ื•ืช ื”ื”ื›ื ืกื•ืช.

ื”ื“ื•ื’ืžื” ื”ื™ื ื›ืš ื•ื›ืš, ื”ืŸ ืžื ืงื•ื“ืช ื”ืžื‘ื˜ ืฉืœ ื”ืชืœื•ืช ื”ืžื•ืชื ื™ืช ืฉืœ ื”ืคื“ื™ื•ืŸ ื‘ื—ื•ื“ืฉ ื”ืฉื ื”, ื•ื”ืŸ ืžื‘ื—ื™ื ืช ืžืกืคืจ ื”ืขืจื›ื™ื - ื™ืฉ ืžืขื˜ ืžืื•ื“ ืžื”ื. ืขื ื–ืืช, ืคื™ืฉื•ื˜ ื›ื–ื” ื™ืืคืฉืจ, ื›ืžื• ืฉืื•ืžืจื™ื, ืœื”ืกื‘ื™ืจ, ืœื ืชืžื™ื“ ื‘ืงืœื•ืช, ืืช ื”ื—ื•ืžืจ ืฉืžื˜ืžื™ืขื™ื ืžืชื—ื™ืœื™ื. ื•ื’ื ืคืฉื˜ื•ืช ื”ืžืกืคืจื™ื ืชืืคืฉืจ ืœืžื™ ืฉืจื•ืฆื” ืœืคืชื•ืจ ืืช ื”ื“ื•ื’ืžื” ืขืœ ื”ื ื™ื™ืจ ืœืœื ืขืœื•ื™ื•ืช ืขื‘ื•ื“ื” ืžืฉืžืขื•ืชื™ื•ืช.

ื”ื‘ื” ื ื ื™ื— ืฉื ื™ืชืŸ ืœื”ืขืจื™ืš ื”ื™ื˜ื‘ ืืช ื”ืชืœื•ืช ื”ื ื™ืชื ืช ื‘ื“ื•ื’ืžื” ืขืœ ื™ื“ื™ ื”ืžืฉื•ื•ืื” ื”ืžืชืžื˜ื™ืช ืฉืœ ืงื• ืจื’ืจืกื™ื” ืคืฉื•ื˜ (ืžื–ื•ื•ื’) ืฉืœ ื”ืฆื•ืจื”:

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ืื™ืคื” ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื”ื•ื ื”ื—ื•ื“ืฉ ืฉื‘ื• ื”ืชืงื‘ืœื” ื”ื”ื›ื ืกื”, ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” - ื”ื›ื ืกื” ื”ืชื•ืืžืช ืœื—ื•ื“ืฉ, ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ะธ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื”ื ืžืงื“ืžื™ ื”ืจื’ืจืกื™ื” ืฉืœ ื”ืงื• ื”ืžืฉื•ืขืจ.

ืฉื™ืžื• ืœื‘ ืฉื”ืžืงื“ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื ืงืจื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื”ืฉื™ืคื•ืข ืื• ื”ืฉื™ืคื•ืข ืฉืœ ื”ืงื• ื”ืžืฉื•ืขืจ; ืžื™ื™ืฆื’ ืืช ื”ืกื›ื•ื ืฉื‘ื• ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื›ืืฉืจ ื–ื” ืžืฉืชื ื” ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”.

ื‘ืจื•ืจ ืฉื”ืžืฉื™ืžื” ืฉืœื ื• ื‘ื“ื•ื’ืžื” ื”ื™ื ืœื‘ื—ื•ืจ ืžืงื“ืžื™ื ื›ืืœื” ื‘ืžืฉื•ื•ืื” ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ะธ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”, ืฉื‘ื”ืŸ ื”ืกื˜ื™ื•ืช ืฉืœ ืขืจื›ื™ ื”ื”ื›ื ืกื” ื”ืžื—ื•ืฉื‘ื™ื ืฉืœื ื• ืœืคื™ ื—ื•ื“ืฉ ืžื”ืชืฉื•ื‘ื•ืช ื”ืืžื™ืชื™ื•ืช, ื›ืœื•ืžืจ. ื”ืขืจื›ื™ื ื”ืžื•ืฆื’ื™ื ื‘ืžื“ื’ื ื™ื”ื™ื• ืžื™ื ื™ืžืœื™ื™ื.

ื”ืฉื™ื˜ื” ื”ื›ื™ ืคื—ื•ืช ืจื™ื‘ื•ืขื™ืช

ืœืคื™ ืฉื™ื˜ืช ื”ืจื™ื‘ื•ืขื™ื ื”ืงื˜ื ื™ื, ื™ืฉ ืœื—ืฉื‘ ืืช ื”ืกื˜ื™ื™ื” ื‘ืจื™ื‘ื•ืข. ื˜ื›ื ื™ืงื” ื–ื• ืžืืคืฉืจืช ืœืš ืœื”ื™ืžื ืข ืžื‘ื™ื˜ื•ืœ ื”ื“ื“ื™ ืฉืœ ืกื˜ื™ื•ืช ืื ื™ืฉ ืœื”ืŸ ืกื™ืžื ื™ื ื”ืคื•ื›ื™ื. ืœื“ื•ื’ืžื”, ืื ื‘ืžืงืจื” ืื—ื“, ื”ืกื˜ื™ื™ื” ื”ื™ื +5 (ืคืœื•ืก ื—ืžืฉ), ื•ื‘ืฉื ื™ -5 (ืžื™ื ื•ืก ื—ืžืฉ), ืื– ืกื›ื•ื ื”ืกื˜ื™ื•ืช ื™ื‘ื˜ืœ ื–ื• ืืช ื–ื• ื•ื™ืกืชื›ื ื‘-0 (ืืคืก). ืืชื” ืœื ืฆืจื™ืš ืœืจื™ื‘ื•ืข ืืช ื”ืกื˜ื™ื™ื”, ืืœื ืœื”ืฉืชืžืฉ ื‘ืžืืคื™ื™ืŸ ื”ืžื•ื“ื•ืœื•ืก ื•ืื– ื›ืœ ื”ืกื˜ื™ื•ืช ื™ื”ื™ื• ื—ื™ื•ื‘ื™ื•ืช ื•ื™ืฆื˜ื‘ืจื•. ืœื ื ืชืขื›ื‘ ืขืœ ื ืงื•ื“ื” ื–ื• ื‘ื”ืจื—ื‘ื”, ืืœื ื ืฆื™ื™ืŸ ืจืง ืฉืœืฆื•ืจืš ื ื•ื—ื•ืช ื”ื—ื™ืฉื•ื‘ื™ื ื ื”ื•ื’ ืœืจื™ื‘ื•ืข ืืช ื”ืกื˜ื™ื™ื”.

ื›ืš ื ืจืื™ืช ื”ื ื•ืกื—ื” ืฉื‘ืขื–ืจืชื” ื ืงื‘ืข ืืช ื”ืกื›ื•ื ื”ืงื˜ืŸ ื‘ื™ื•ืชืจ ืฉืœ ืกื˜ื™ื•ืช ื‘ืจื™ื‘ื•ืข (ืฉื’ื™ืื•ืช):

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ืื™ืคื” ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื”ื•ื ืคื•ื ืงืฆื™ื” ืฉืœ ืงื™ืจื•ื‘ ืฉืœ ืชืฉื•ื‘ื•ืช ืืžื™ืชื™ื•ืช (ื›ืœื•ืžืจ, ื”ื”ื›ื ืกื” ืฉื—ื™ืฉื‘ื ื•),

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื”ืŸ ื”ืชืฉื•ื‘ื•ืช ื”ืืžื™ืชื™ื•ืช (ื”ื”ื›ื ืกื•ืช ืžืกื•ืคืงื•ืช ื‘ืžื“ื’ื),

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื”ื•ื ืžื“ื“ ื”ืžื“ื’ื (ืžืกืคืจ ื”ื—ื•ื“ืฉ ืฉื‘ื• ื ืงื‘ืขืช ื”ื—ืจื™ื’ื”)

ื‘ื•ืื• ื ื‘ื“ื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื”, ื ื’ื“ื™ืจ ืืช ืžืฉื•ื•ืื•ืช ื”ื“ื™ืคืจื ืฆื™ืืœื™ื•ืช ื”ื—ืœืงื™ื•ืช, ื•ื ื”ื™ื” ืžื•ื›ื ื™ื ืœืขื‘ื•ืจ ืœืคืชืจื•ืŸ ื”ืื ืœื™ื˜ื™. ืื‘ืœ ืจืืฉื™ืช, ื‘ื•ืื• ื ืฆื ืœืกื™ื•ืจ ืงืฆืจ ืขืœ ืžื”ื™ ื‘ื™ื“ื•ืœ ื•ื ื–ื›ื•ืจ ืืช ื”ืžืฉืžืขื•ืช ื”ื’ื™ืื•ืžื˜ืจื™ืช ืฉืœ ื”ื ื’ื–ืจืช.

ื‘ื™ื“ื•ืœ

ื“ื™ืคืจื ืฆื™ืืฆื™ื” ื”ื™ื ืคืขื•ืœืช ืžืฆื™ืืช ื”ื ื’ื–ืจืช ืฉืœ ืคื•ื ืงืฆื™ื”.

ืœืžื” ืžืฉืžืฉืช ื”ื ื’ื–ืจืช? ื”ื ื’ื–ืจืช ืฉืœ ืคื•ื ืงืฆื™ื” ืžืืคื™ื™ื ืช ืืช ืงืฆื‘ ื”ืฉื™ื ื•ื™ ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื•ืื•ืžืจืช ืœื ื• ืืช ื”ื›ื™ื•ื•ืŸ ืฉืœื”. ืื ื”ื ื’ื–ืจืช ื‘ื ืงื•ื“ื” ื ืชื•ื ื” ื—ื™ื•ื‘ื™ืช, ื”ืคื•ื ืงืฆื™ื” ื’ื“ืœื”; ืื—ืจืช, ื”ืคื•ื ืงืฆื™ื” ื™ื•ืจื“ืช. ื•ื›ื›ืœ ืฉื”ืขืจืš ืฉืœ ื”ื ื’ื–ืจืช ื”ืžื•ื—ืœื˜ืช ื’ื“ื•ืœ ื™ื•ืชืจ, ื›ืš ืงืฆื‘ ื”ืฉื™ื ื•ื™ ืฉืœ ืขืจื›ื™ ื”ืคื•ื ืงืฆื™ื” ื’ื‘ื•ื” ื™ื•ืชืจ, ื•ื›ืš ื’ื ื”ืฉื™ืคื•ืข ืฉืœ ื’ืจืฃ ื”ืคื•ื ืงืฆื™ื•ืช ืชืœื•ืœ ื™ื•ืชืจ.

ืœื“ื•ื’ืžื”, ื‘ืชื ืื™ื ืฉืœ ืžืขืจื›ืช ืงื•ืื•ืจื“ื™ื ื˜ื•ืช ืงืจื˜ื–ื™ืช, ืขืจืš ื”ื ื’ื–ืจืช ื‘ื ืงื•ื“ื” M(0,0) ืฉื•ื•ื” ืœ +25 ืคื™ืจื•ืฉื• ืฉื‘ื ืงื•ื“ื” ื ืชื•ื ื”, ื›ืืฉืจ ื”ืขืจืš ืžื•ื–ื– ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื™ืžื™ื ื” ืœืคื™ ื™ื—ื™ื“ื” ืงื•ื ื‘ื ืฆื™ื•ื ืœื™ืช, ืขืจืš ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื’ื“ืœ ื‘-25 ื™ื—ื™ื“ื•ืช ืงื•ื ื‘ื ืฆื™ื•ื ืœื™ื•ืช. ื‘ื’ืจืฃ ื–ื” ื ืจืื” ื›ืžื• ืขืœื™ื™ื” ื“ื™ ืชืœื•ืœื” ื‘ืขืจื›ื™ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ืžื ืงื•ื“ื” ื ืชื•ื ื”.

ื“ื•ื’ืžื” ืื—ืจืช. ื”ืขืจืš ื”ื ื’ื–ืจ ืฉื•ื•ื” -0,1 ืื•ืžืจ ืฉื›ืืฉืจ ื ืขืงื•ืจ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ืœื™ื—ื™ื“ื” ืงื•ื ื‘ื ืฆื™ื•ื ืœื™ืช ืื—ืช, ืขืจืš ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื™ื•ืจื“ ื‘-0,1 ื™ื—ื™ื“ื” ืงื•ื ื‘ื ืฆื™ื•ื ืœื™ืช ื‘ืœื‘ื“. ื™ื—ื“ ืขื ื–ืืช, ื‘ื’ืจืฃ ืฉืœ ื”ืคื•ื ืงืฆื™ื”, ืื ื• ื™ื›ื•ืœื™ื ืœืจืื•ืช ืฉื™ืคื•ืข ื‘ืงื•ืฉื™ ืžื•ืจื’ืฉ ื›ืœืคื™ ืžื˜ื”. ืื ืžืฆื™ื™ืจื™ื ืื ืœื•ื’ื™ื” ืœื”ืจ, ื–ื” ื›ืื™ืœื• ืื ื—ื ื• ื™ื•ืจื“ื™ื ืœืื˜ ืžืื•ื“ ื‘ืžื“ืจื•ืŸ ืžืชื•ืŸ ืžื”ื”ืจ, ืฉืœื ื›ืžื• ื”ื“ื•ื’ืžื” ื”ืงื•ื“ืžืช, ืฉื‘ื” ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื˜ืคืก ืขืœ ืคืกื’ื•ืช ืชืœื•ืœื•ืช ืžืื•ื“ :)

ื›ืš, ืœืื—ืจ ื‘ื™ื“ื•ืœ ื”ืคื•ื ืงืฆื™ื” ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื‘ืกื™ื›ื•ื™ื™ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ะธ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”, ืื ื• ืžื’ื“ื™ืจื™ื ืžืฉื•ื•ืื•ืช ื“ื™ืคืจื ืฆื™ืืœื™ื•ืช ื—ืœืงื™ื•ืช ืžืกื“ืจ 1. ืœืื—ืจ ืงื‘ื™ืขืช ื”ืžืฉื•ื•ืื•ืช, ื ืงื‘ืœ ืžืขืจื›ืช ืฉืœ ืฉืชื™ ืžืฉื•ื•ืื•ืช, ืฉืขืœ ื™ื“ื™ ืคืชืจื•ื ื” ื ื•ื›ืœ ืœื‘ื—ื•ืจ ืขืจื›ื™ื ื›ืืœื” ืฉืœ ื”ืžืงื“ืžื™ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ะธ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”, ืฉืขื‘ื•ืจื• ื”ืขืจื›ื™ื ืฉืœ ื”ื ื’ื–ืจื•ืช ื”ืžืชืื™ืžื•ืช ื‘ื ืงื•ื“ื•ืช ื ืชื•ื ื•ืช ืžืฉืชื ื™ื ื‘ื›ืžื•ืช ืžืื•ื“ ืžืื•ื“ ืงื˜ื ื”, ื•ื‘ืžืงืจื” ืฉืœ ืคืชืจื•ืŸ ืื ืœื™ื˜ื™ ืœื ืžืฉืชื ื™ื ื›ืœืœ. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืคื•ื ืงืฆื™ื™ืช ื”ืฉื’ื™ืื” ื‘ืžืงื“ืžื™ื ืฉื ืžืฆืื• ืชื’ื™ืข ืœืžื™ื ื™ืžื•ื, ืฉื›ืŸ ืขืจื›ื™ ื”ื ื’ื–ืจื•ืช ื”ื—ืœืงื™ื•ืช ื‘ื ืงื•ื“ื•ืช ืืœื• ื™ื”ื™ื• ืฉื•ื•ื™ื ืœืืคืก.

ืื– ืœืคื™ ื›ืœืœื™ ื”ื”ื‘ื—ื ื”, ื”ืžืฉื•ื•ืื” ื”ื ื’ื–ืจืช ื”ื—ืœืงื™ืช ืฉืœ ื”ืกื“ืจ ื”ืจืืฉื•ืŸ ื‘ื™ื—ืก ืœืžืงื“ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื™ืงื‘ืœ ืืช ื”ื˜ื•ืคืก:

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ืžืฉื•ื•ืืช ื ื’ื–ืจืช ื—ืœืงื™ืช ืžืกื“ืจ 1 ื‘ื™ื—ืก ืœ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื™ืงื‘ืœ ืืช ื”ื˜ื•ืคืก:

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ื›ืชื•ืฆืื” ืžื›ืš, ืงื™ื‘ืœื ื• ืžืขืจื›ืช ืžืฉื•ื•ืื•ืช ืฉื™ืฉ ืœื” ืคืชืจื•ืŸ ืื ืœื™ื˜ื™ ืคืฉื•ื˜ ืœืžื“ื™:

ืœื”ืชื—ื™ืœ{ืžืฉื•ื•ืื”*}
ืœื”ืชื—ื™ืœ{ืžืงืจื™ื}
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
ืกื•ืฃ{ืžืงืจื™ื}
ืกื•ืฃ{ืžืฉื•ื•ืื”*}

ืœืคื ื™ ืคืชืจื•ืŸ ื”ืžืฉื•ื•ืื”, ื‘ื•ืื• ื ื˜ืขืŸ ืžืจืืฉ, ื ื‘ื“ื•ืง ืฉื”ื˜ืขื™ื ื” ื ื›ื•ื ื” ื•ื ืขืฆื‘ ืืช ื”ื ืชื•ื ื™ื.

ื˜ืขื™ื ื” ื•ืขื™ืฆื•ื‘ ื ืชื•ื ื™ื

ื™ืฉ ืœืฆื™ื™ืŸ ื›ื™ ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ื›ื™ ืขื‘ื•ืจ ื”ืคืชืจื•ืŸ ื”ืื ืœื™ื˜ื™, ื•ื‘ื”ืžืฉืš ืขื‘ื•ืจ ื™ืจื™ื“ื” ืฉื™ืคื•ืข ื•ืกื˜ื•ื›ืกื˜ื™, ื ืฉืชืžืฉ ื‘ืงื•ื“ ื‘ืฉืชื™ ื•ืจื™ืืฆื™ื•ืช: ื‘ืืžืฆืขื•ืช ื”ืกืคืจื™ื™ื” ืจื“ื•ื ื•ื‘ืœื™ ืœื”ืฉืชืžืฉ ื‘ื•, ืื– ื ืฆื˜ืจืš ืขื™ืฆื•ื‘ ื ืชื•ื ื™ื ืžืชืื™ื (ืจืื” ืงื•ื“).

ืงื•ื“ ื˜ืขื™ื ืช ื•ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื

# ะธะผะฟะพั€ั‚ะธั€ัƒะตะผ ะฒัะต ะฝัƒะถะฝั‹ะต ะฝะฐะผ ะฑะธะฑะปะธะพั‚ะตะบะธ
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 '********************************************'

ืจืื™ื”

ื›ืขืช, ืœืื—ืจ ืฉืขืฉื™ื ื•, ืจืืฉื™ืช, ืืช ื”ื ืชื•ื ื™ื, ืฉื ื™ืช, ื‘ื“ืงื ื• ืืช ื ื›ื•ื ื•ืช ื”ื˜ืขื™ื ื” ื•ืœื‘ืกื•ืฃ ืคืจืžื˜ื ื• ืืช ื”ื ืชื•ื ื™ื, ื ื‘ืฆืข ืืช ื”ื”ื“ืžื™ื” ื”ืจืืฉื•ื ื”. ื”ืฉื™ื˜ื” ื”ืžืฉืžืฉืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืœื›ืš ื”ื™ื ืขืœื™ืœืช ื–ื•ื’ ืกืคืจื™ื•ืช ื™ื•ื‘ืœ ื™ื. ื‘ื“ื•ื’ืžื” ืฉืœื ื•, ื‘ื’ืœืœ ื”ืžืกืคืจื™ื ื”ืžื•ื’ื‘ืœื™ื, ืื™ืŸ ื˜ืขื ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื™ื” ื™ื•ื‘ืœ ื™ื. ื ืฉืชืžืฉ ื‘ืกืคืจื™ื™ื” ื”ืจื’ื™ืœื” ืžื˜ืคืœื•ื˜ืœื™ื‘ ื•ืคืฉื•ื˜ ืชืกืชื›ืœ ืขืœ ืชื•ื›ื ื™ืช ื”ืคื™ื–ื•ืจ.

ืงื•ื“ ืคื™ื–ื•ืจ

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 "ืชืœื•ืช ื”ื”ื›ื ืกื•ืช ื‘ื—ื•ื“ืฉ ื”ืฉื ื”"

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ืคืชืจื•ืŸ ืื ืœื™ื˜ื™

ื‘ื•ืื• ื ืฉืชืžืฉ ื‘ื›ืœื™ื ื”ื ืคื•ืฆื™ื ื‘ื™ื•ืชืจ ื‘ ืคึผึดื™ืชื•ึนืŸ ื•ืœืคืชื•ืจ ืืช ืžืขืจื›ืช ื”ืžืฉื•ื•ืื•ืช:

ืœื”ืชื—ื™ืœ{ืžืฉื•ื•ืื”*}
ืœื”ืชื—ื™ืœ{ืžืงืจื™ื}
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
ืกื•ืฃ{ืžืงืจื™ื}
ืกื•ืฃ{ืžืฉื•ื•ืื”*}

ืœืคื™ ื”ืœื›ืช ืงืจื™ื™ืžืจ ื ืžืฆื ืืช ื”ืงื•ื‘ืข ื”ื›ืœืœื™, ื›ืžื• ื’ื ื”ืงื•ื‘ืขื™ื ืขืœ ื™ื“ื™ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื•ืขืœ ื™ื“ื™ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”, ืœืื—ืจ ืžื›ืŸ, ื—ืœื•ืงืช ื”ืงื•ื‘ืข ื‘ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ืœืงื•ื‘ืข ื”ื›ืœืœื™ - ืžืฆื ืืช ื”ืžืงื“ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”, ื‘ืื•ืคืŸ ื“ื•ืžื” ืื ื• ืžื•ืฆืื™ื ืืช ื”ืžืงื“ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”.

ืงื•ื“ ืคืชืจื•ืŸ ืื ืœื™ื˜ื™

# ะพะฟั€ะตะดะตะปะธะผ ั„ัƒะฝะบั†ะธัŽ ะดะปั ั€ะฐัั‡ะตั‚ะฐ ะบะพัั„ั„ะธั†ะธะตะฝั‚ะพะฒ 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)

# ะดะปั ะฝะฐั‡ะฐะปะฐ ะดะพะฑะฐะฒะธะผ ัั‚ะพะปะฑะตั† ั ะฝะต ะธะทะผะตะฝััŽั‰ะธะผัั ะทะฝะฐั‡ะตะฝะธะตะผ ะฒ 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)

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ืขื ื›ืžื•ืช ืงื˜ื ื” ืฉืœ ื ืชื•ื ื™ื, ื™ื•ืฆืืช ืงื“ื™ืžื” ืคื•ื ืงืฆื™ื” "ื ื›ืชื‘ืช ื‘ืขืฆืžื”", ื”ืžื•ืฆืืช ืืช ื”ืžืงื“ืžื™ื ื‘ืฉื™ื˜ืช Cramer.

ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœืขื‘ื•ืจ ืœื“ืจื›ื™ื ืื—ืจื•ืช ืœืžืฆื•ื ืžืงื“ืžื™ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ะธ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”.

ื™ืจื™ื“ื” ื‘ืฉื™ืคื•ืข

ืจืืฉื™ืช, ื”ื‘ื” ื ื’ื“ื™ืจ ืžื”ื• ืฉื™ืคื•ืข. ื‘ืžื™ืœื™ื ืคืฉื•ื˜ื•ืช, ื”ืฉื™ืคื•ืข ื”ื•ื ืงื˜ืข ื”ืžืฆื™ื™ืŸ ืืช ื›ื™ื•ื•ืŸ ื”ืฆืžื™ื—ื” ื”ืžืงืกื™ืžืœื™ืช ืฉืœ ืคื•ื ืงืฆื™ื”. ื‘ืื ืœื•ื’ื™ื” ืœื˜ื™ืคื•ืก ืขืœ ื”ืจ, ื›ืืฉืจ ืคื ื™ ื”ืฉื™ืคื•ืข ื”ื ื”ืžืงื•ื ื‘ื• ื ืžืฆื ื”ื˜ื™ืคื•ืก ื”ืชืœื•ืœ ื‘ื™ื•ืชืจ ืœืจืืฉ ื”ื”ืจ. ืžืคืชื—ื™ื ืืช ื”ื“ื•ื’ืžื” ืขื ื”ื”ืจ, ืื ื• ื–ื•ื›ืจื™ื ืฉืœืžืขืฉื” ืื ื• ื–ืงื•ืงื™ื ืœื™ืจื™ื“ื” ื”ืชืœื•ืœื” ื‘ื™ื•ืชืจ ืขืœ ืžื ืช ืœื”ื’ื™ืข ืœืฉืคืœื” ื›ืžื” ืฉื™ื•ืชืจ ืžื”ืจ, ื›ืœื•ืžืจ ื”ืžื™ื ื™ืžื•ื - ื”ืžืงื•ื ื‘ื• ื”ืคื•ื ืงืฆื™ื” ืื™ื ื” ืขื•ืœื” ืื• ื™ื•ืจื“ืช. ื‘ืฉืœื‘ ื–ื” ื”ื ื’ื–ืจืช ืชื”ื™ื” ืฉื•ื•ื” ืœืืคืก. ืœื›ืŸ, ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืฉื™ืคื•ืข, ืืœื ืื ื˜ื™ ืฉื™ืคื•ืข. ื›ื“ื™ ืœืžืฆื•ื ืืช ืื ื˜ื™-ื”ื“ืจื’ื” ืืชื” ืจืง ืฆืจื™ืš ืœื”ื›ืคื™ืœ ืืช ื”ืฉื™ืคื•ืข ื‘ -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
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)

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ืื•ืœื™ ืื ื—ื ื• ืขื•ืฉื™ื ืžืฉื”ื• ืœื ื‘ืกื“ืจ, ืื‘ืœ ืฉื•ื‘ ื–ื• ืคื•ื ืงืฆื™ื” ืคืฉื•ื˜ื” "ื›ืชื•ื‘ื” ื‘ื‘ื™ืช" ืฉืื™ื ื” ืžืฉืชืžืฉืช ื‘ืกืคืจื™ื™ื” ืจื“ื•ื ืขื•ืœื” ืขืœ ื–ืžืŸ ื”ื—ื™ืฉื•ื‘ ืฉืœ ืคื•ื ืงืฆื™ื” ื‘ืืžืฆืขื•ืช ื”ืกืคืจื™ื™ื” ืจื“ื•ื.

ืื‘ืœ ืื ื—ื ื• ืœื ืขื•ืžื“ื™ื ื‘ืžืงื•ื, ืืœื ืžืชืงื“ืžื™ื ืœืงืจืืช ืœื™ืžื•ื“ ื“ืจืš ืžืจื’ืฉืช ื ื•ืกืคืช ืœืคืชื•ืจ ืืช ืžืฉื•ื•ืืช ื”ืจื’ืจืกื™ื” ื”ืœื™ื ื™ืืจื™ืช ื”ืคืฉื•ื˜ื”. ืคื’ื•ืฉ ืื•ืชื ื•!

ื™ืจื™ื“ื” ื‘ืฉื™ืคื•ืข ืกื˜ื•ื›ืกื˜ื™

ืขืœ ืžื ืช ืœื”ื‘ื™ืŸ ื‘ืžื”ื™ืจื•ืช ืืช ืขืงืจื•ืŸ ื”ืคืขื•ืœื” ืฉืœ ื™ืจื™ื“ืช ืฉื™ืคื•ืข ืกื˜ื•ื›ืกื˜ื™ืช, ืขื“ื™ืฃ ืœืงื‘ื•ืข ืืช ื”ื”ื‘ื“ืœื™ื ืฉืœื” ืžื™ืจื™ื“ื” ืฉื™ืคื•ืขื™ืช ืจื’ื™ืœื”. ืื ื—ื ื•, ื‘ืžืงืจื” ืฉืœ ื™ืจื™ื“ื” ื‘ืฉื™ืคื•ืข, ื‘ืžืฉื•ื•ืื•ืช ื”ื ื’ื–ืจื•ืช ืฉืœ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ะธ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ื”ืฉืชืžืฉ ื‘ืกื›ื•ืžื™ื ืฉืœ ื”ืขืจื›ื™ื ืฉืœ ื›ืœ ื”ืชื›ื•ื ื•ืช ื•ื”ืชืฉื•ื‘ื•ืช ื”ืืžื™ืชื™ื•ืช ื”ื–ืžื™ื ื•ืช ื‘ืžื“ื’ื (ื›ืœื•ืžืจ, ื”ืกื›ื•ืžื™ื ืฉืœ ื›ืœ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ะธ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”). ื‘ื”ื•ืจื“ืช ืฉื™ืคื•ืข ืกื˜ื•ื›ืกื˜ื™, ืœื ื ืฉืชืžืฉ ื‘ื›ืœ ื”ืขืจื›ื™ื ื”ืงื™ื™ืžื™ื ื‘ืžื“ื’ื, ืืœื ื‘ืžืงื•ื ื–ืืช, ื‘ื—ืจ ืคืกืื•ื“ื• ืืงืจืื™ืช ื‘ืžื” ืฉื ืงืจื ืื™ื ื“ืงืก ืžื“ื’ื ื•ื ืฉืชืžืฉ ื‘ืขืจื›ื™ื ืฉืœื•.

ืœื“ื•ื’ืžื”, ืื ื”ืžื“ื“ ื ืงื‘ืข ื›ืžืกืคืจ 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)

# ะดะปั ะฝะฐั‡ะฐะปะฐ ะฝะฐะฟะธัˆะตะผ ั„ัƒะฝะบั†ะธัŽ ะณั€ะฐะดะธะตะฝั‚ะฝะพะณะพ ัˆะฐะณะฐ
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

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ื”ืขืจื›ื™ื ื”ืชื‘ืจืจื• ื›ื›ืžืขื˜ ื–ื”ื™ื ืœืืœื• ื‘ืขืช ื™ืจื™ื“ื” ืœืœื ืฉื™ืžื•ืฉ ืจื“ื•ื. ืขื ื–ืืช, ื–ื” ื”ื’ื™ื•ื ื™.

ื‘ื•ืื• ืœื’ืœื•ืช ื›ืžื” ื–ืžืŸ ืœืงื— ืœื ื• ื™ืจื™ื“ื•ืช ืฉื™ืคื•ืข ืกื˜ื•ื›ืกื˜ื™ื•ืช.

ืงื•ื“ ืœืงื‘ื™ืขืช ื–ืžืŸ ื—ื™ืฉื•ื‘ 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)

ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”

ื›ื›ืœ ืฉื ื›ื ืกื™ื ืœืชื•ืš ื”ื™ืขืจ, ื›ืš ื”ืขื ื ื™ื ื›ื”ื™ื ื™ื•ืชืจ: ืฉื•ื‘, ื”ื ื•ืกื—ื” "ื‘ื›ืชื‘ ืขืฆืžื™" ืžืฆื™ื’ื” ืืช ื”ืชื•ืฆืื” ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ. ื›ืœ ื–ื” ืžืฆื‘ื™ืข ืขืœ ื›ืš ืฉื—ื™ื™ื‘ื•ืช ืœื”ื™ื•ืช ื“ืจื›ื™ื ืขื“ื™ื ื•ืช ืืคื™ืœื• ื™ื•ืชืจ ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื™ื” ืจื“ื•ื, ืฉื‘ืืžืช ืžื–ืจื– ืืช ืคืขื•ืœื•ืช ื”ื—ื™ืฉื•ื‘. ื‘ืžืืžืจ ื–ื” ืœื ื ืœืžื“ ืขืœื™ื”ื. ื™ื”ื™ื” ืขืœ ืžื” ืœื—ืฉื•ื‘ ื‘ื–ืžื ืš ื”ืคื ื•ื™ :)

ืื ื• ืžืกื›ืžื™ื

ืœืคื ื™ ืกื™ื›ื•ื, ื‘ืจืฆื•ื ื™ ืœืขื ื•ืช ืขืœ ืฉืืœื” ืฉื›ื›ืœ ื”ื ืจืื” ืขืœืชื” ืžื”ืงื•ืจื ื”ื™ืงืจ ืฉืœื ื•. ืœืžื” ื‘ืขืฆื "ืขื™ื ื•ื™" ื›ื–ื” ืขื ื™ืจื™ื“ื•ืช, ืœืžื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืœื›ืช ื‘ืžืขืœื” ื”ื”ืจ (ื‘ืขื™ืงืจ ืœืžื˜ื”) ื›ื“ื™ ืœืžืฆื•ื ืืช ื”ืฉืคืœื” ื”ื™ืงืจื”, ืื ื™ืฉ ื‘ื™ื“ื™ื ื• ืžื›ืฉื™ืจ ื›ื” ื—ื–ืง ื•ืคืฉื•ื˜, ื‘- ืฆื•ืจื” ืฉืœ ืคืชืจื•ืŸ ืื ืœื™ื˜ื™, ืฉืžืขื‘ื™ืจ ืื•ืชื ื• ืžื™ื™ื“ื™ืช ืœืžืงื•ื ื”ื ื›ื•ืŸ?

ื”ืชืฉื•ื‘ื” ืœืฉืืœื” ื–ื• ื ืžืฆืืช ืขืœ ืคื ื™ ื”ืฉื˜ื—. ื›ืขืช ื”ืกืชื›ืœื ื• ืขืœ ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ืžืื•ื“, ืฉื‘ื” ื”ืชืฉื•ื‘ื” ื”ืืžื™ืชื™ืช ื”ื™ื ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื” ืชืœื•ื™ ื‘ืกื™ืžืŸ ืื—ื“ ืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”. ืืชื” ืœื ืจื•ืื” ืืช ื–ื” ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ื—ื™ื™ื, ืื– ื‘ื•ืื• ื ื“ืžื™ื™ืŸ ืฉื™ืฉ ืœื ื• 2, 30, 50 ืื• ื™ื•ืชืจ ืกื™ืžื ื™ื. ื‘ื•ืื• ื ื•ืกื™ืฃ ืœื–ื” ืืœืคื™, ืื• ืืคื™ืœื• ืขืฉืจื•ืช ืืœืคื™ ืขืจื›ื™ื ืขื‘ื•ืจ ื›ืœ ืชื›ื•ื ื”. ื‘ืžืงืจื” ื–ื”, ื™ื™ืชื›ืŸ ืฉื”ืคืชืจื•ืŸ ื”ืื ืœื™ื˜ื™ ืœื ื™ืขืžื•ื“ ื‘ืžื‘ื—ืŸ ื•ื™ื›ืฉืœ. ื‘ืชื•ืจื•, ื™ืจื™ื“ื” ื‘ืฉื™ืคื•ืข ื•ื”ื•ื•ืจื™ืืฆื™ื•ืช ืฉืœื” ื™ืงืจื‘ื• ืื•ืชื ื• ืœืื˜ ืื‘ืœ ื‘ื˜ื•ื— ืืœ ื”ืžื˜ืจื” - ื”ืžื™ื ื™ืžื•ื ืฉืœ ื”ืคื•ื ืงืฆื™ื”. ื•ืืœ ืชื“ืื’ ืœื’ื‘ื™ ื”ืžื”ื™ืจื•ืช - ื›ื ืจืื” ืฉื ื‘ื“ื•ืง ื“ืจื›ื™ื ืฉื™ืืคืฉืจื• ืœื ื• ืœื”ื’ื“ื™ืจ ื•ืœื•ื•ืกืช ืืช ืื•ืจืš ื”ืฆืขื“ (ื›ืœื•ืžืจ, ืžื”ื™ืจื•ืช).

ื•ืขื›ืฉื™ื• ื”ืกื™ื›ื•ื ื”ืงืฆืจ ืžืžืฉ.

ืจืืฉื™ืช, ืื ื™ ืžืงื•ื•ื” ืฉื”ื—ื•ืžืจ ื”ืžื•ืฆื’ ื‘ืžืืžืจ ื™ืขื–ื•ืจ ืœ"ืžื“ืขื ื™ ื ืชื•ื ื™ื" ืžืชื—ื™ืœื™ื ื‘ื”ื‘ื ื” ื›ื™ืฆื“ ืœืคืชื•ืจ ืžืฉื•ื•ืื•ืช ืจื’ืจืกื™ื” ืœื™ื ื™ืืจื™ื•ืช ืคืฉื•ื˜ื•ืช (ื•ืœื ืจืง).

ืฉื ื™ืช, ื‘ื“ืงื ื• ื›ืžื” ื“ืจื›ื™ื ืœืคืชื•ืจ ืืช ื”ืžืฉื•ื•ืื”. ื›ืขืช, ื‘ื”ืชืื ืœืžืฆื‘, ื ื•ื›ืœ ืœื‘ื—ื•ืจ ืืช ื”ืžืชืื™ื ื‘ื™ื•ืชืจ ืœืคืชืจื•ืŸ ื”ื‘ืขื™ื”.

ืฉืœื™ืฉื™ืช, ืจืื™ื ื• ืืช ื”ื›ื•ื— ืฉืœ ื”ื’ื“ืจื•ืช ื ื•ืกืคื•ืช, ื›ืœื•ืžืจ ืื•ืจืš ืฆืขื“ ื”ื™ืจื™ื“ื” ื‘ืฉื™ืคื•ืข. ืื™ ืืคืฉืจ ืœื”ื–ื ื™ื— ืืช ื”ืคืจืžื˜ืจ ื”ื–ื”. ื›ืคื™ ืฉืฆื•ื™ืŸ ืœืขื™ืœ, ืขืœ ืžื ืช ืœื”ื•ื–ื™ืœ ืืช ืขืœื•ืช ื”ื—ื™ืฉื•ื‘ื™ื, ื™ืฉ ืœืฉื ื•ืช ืืช ืื•ืจืš ื”ืฆืขื“ ื‘ืžื”ืœืš ื”ื™ืจื™ื“ื”.

ืจื‘ื™ืขื™ืช, ื‘ืžืงืจื” ืฉืœื ื•, ืคื•ื ืงืฆื™ื•ืช "ื›ืชื•ื‘ื•ืช ื‘ื‘ื™ืช" ื”ืจืื• ืืช ืชื•ืฆืื•ืช ื”ื–ืžืŸ ื”ื˜ื•ื‘ื•ืช ื‘ื™ื•ืชืจ ืœื—ื™ืฉื•ื‘ื™ื. ื–ื” ื›ื ืจืื” ื ื•ื‘ืข ืžื”ืฉื™ืžื•ืฉ ื”ืœื ืžืงืฆื•ืขื™ ื‘ื™ื•ืชืจ ื‘ื™ื›ื•ืœื•ืช ื”ืกืคืจื™ื™ื” ืจื“ื•ื. ืื‘ืœ ื›ืš ืื• ื›ืš, ื”ืžืกืงื ื” ื”ื‘ืื” ืžืขื™ื“ื” ืขืœ ืขืฆืžื”. ืžืฆื“ ืื—ื“, ืœืคืขืžื™ื ื›ื“ืื™ ืœื”ื˜ื™ืœ ืกืคืง ื‘ื“ืขื•ืช ืžื‘ื•ืกืกื•ืช, ื•ืžืฆื“ ืฉื ื™, ืœื ืชืžื™ื“ ื›ื“ืื™ ืœืกื‘ืš ื”ื›ืœ - ืœื”ื™ืคืš, ืœืคืขืžื™ื ื“ืจืš ืคืฉื•ื˜ื” ื™ื•ืชืจ ืœืคืชืจื•ืŸ ื‘ืขื™ื” ื™ืขื™ืœื” ื™ื•ืชืจ. ื•ืžื›ื™ื•ื•ืŸ ืฉื”ืžื˜ืจื” ืฉืœื ื• ื”ื™ื™ืชื” ืœื ืชื— ืฉืœื•ืฉ ื’ื™ืฉื•ืช ืœืคืชืจื•ืŸ ืžืฉื•ื•ืืช ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช ืคืฉื•ื˜ื”, ื”ืฉื™ืžื•ืฉ ื‘ืคื•ื ืงืฆื™ื•ืช "ื ื›ืชื‘ื•ืช ื‘ืขืฆืžืŸ" ื”ืกืคื™ืง ืœื ื• ื‘ื”ื—ืœื˜.

ืกืคืจื•ืช (ืื• ืžืฉื”ื• ื›ื–ื”)

1. ืจื’ืจืกื™ื” ืœื™ื ืืจื™ืช

http://statistica.ru/theory/osnovy-lineynoy-regressii/

2. ืฉื™ื˜ืช ื”ืจื™ื‘ื•ืขื™ื ื”ืงื˜ื ื™ื ื‘ื™ื•ืชืจ

mathprofi.ru/metod_naimenshih_kvadratov.html

3. ื ื’ื–ืจืช

www.mathprofi.ru/chastnye_proizvodnye_primery.html

4. ืžืขื‘ืจ ืฆื‘ืข

mathprofi.ru/proizvodnaja_po_napravleniju_i_gradient.html

5. ื™ืจื™ื“ื” ื‘ืฉื™ืคื•ืข

habr.com/en/post/471458

habr.com/en/post/307312

artemarakcheev.com//2017-12-31/linear_regression

6. ืกืคืจื™ื™ืช NumPy

docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.linalg.solve.html

docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.linalg.pinv.html

pythonworld.ru/numpy/2.html

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”