рднреЛрд▓реЗ рдмреЗрд╕реЗрд╕рд┐рдпрди рдХреНрд▓рд╛рд╕рд┐рдлрд╝рд╛рдпрд░рдлрд╝рд╛рдпрд░ рд╕рд░рд▓ рд╡рд░реНрдЧреАрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрд╣реБрдд рдмрд╛рд░ рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдИ рдмрджрддрд░ рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдореИрдВ рдХреЛрдб рдФрд░ рдПрдХ рд╡рд┐рд╡рд░рдг рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо рд╕реЗ рд▓рд┐рдВрдЧ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд▓реЗрдВред рдмреЗрд╢рдХ, рд▓рд┐рдВрдЧ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓рд┐рдВрдЧ рд▓реЗрдмрд▓ рд╡рд╛рд▓реЗ рдирд╛рдореЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реВрдЪреА рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзреВрд░реА рд░рд╣реЗрдЧреАред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЪрд┐рд╣реНрдирд┐рдд рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЛ "рдЯреНрд░реЗрди" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд░ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛
ред
рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд┐рдЯ
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╛рда O рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░реНрдЧ C рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ c рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдзрд┐рдХрддрдо рд╣реЛрдЧреАред рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреА (рд╕реА | рдУ) рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдмрд╛рдпреЗрд╕рд┐рдпрди рдкреНрд░рдореЗрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рдЪреВрдВрдХрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреА рдЕрдзрд┐рдХрддрдо рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рднрд╛рдЬрдХ рд╣рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдпрд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рд▓рд╛рдЗрди рдУ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдкреВрд░реА рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕реВрддреНрд░ рдлрд╛рд░реНрдо рд▓реЗ рдЬрд╛рдПрдЧрд╛:

рд╣рд░рдЧрд┐рдЬ рд╣рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИред рдЕрдВрд╢ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рдлрд┐рд░ рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣рд╛рдБ рд╣рдо "рднреЛрд▓реЗ" рдзрд╛рд░рдгрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░ O рдХреЗрд╡рд▓ рд╡рд░реНрдЧ C рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓реАрдХрд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдВрд╢ рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдлрд╛рд░реНрдо:

рдЕрдВрддрд┐рдо рд╕реВрддреНрд░ рдлрд╛рд░реНрдо рд▓реЗ рдЬрд╛рдПрдЧрд╛:

(1)
рдпрд╛рдиреА рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЧрдгрдирд╛ P (C) рдФрд░ P (O | C) рд╣реИред рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЛ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд┐рдпрд░ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЛрдб
рдиреАрдЪреЗ рдЕрдЬрдЧрд░ рдХреЛрдб рд╣реИред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП (рд╕реВрддреНрд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЧрд┐рдирддреА), рджреВрд╕рд░рд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП (рд╕реВрддреНрд░ рдХреА рдкреНрд░рддреНрдпрдХреНрд╖ рдЧрдгрдирд╛)ред
from __future__ import division from collections import defaultdict from math import log def train(samples): classes, freq = defaultdict(lambda:0), defaultdict(lambda:0) for feats, label in samples: classes[label] += 1
рдЯреНрд░реЗрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдкрд╣рд▓реА рдкрд╛рдВрдЪ рд▓рд╛рдЗрдиреЗрдВ рд╡рд░реНрдЧ рд╕реА рдХреА рд╕рдВрдЦреНрдпрд╛, рд╕рд╛рде рд╣реА рдПрдХ рдирдореВрдиреЗ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдУ рдФрд░ рд╕реА рдХреА рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИрдВред рд╡рд┐рдзрд┐ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдмрд╕ рдЗрди рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдВрднрд╛рд╡реНрдпрддрд╛ P ┬й рдФрд░ P (O | C) рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП
рд╡рд░реНрдЧреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдЦреЛрдЬред рд╕реВрддреНрд░ (1) рд╕реЗ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдЛрдгрд╛рддреНрдордХ рдЪрд┐рдиреНрд╣ рдХреЗ рд╕рд╛рде рд▓рд┐рдП рдЧрдП рд▓рдШреБрдЧрдгрдХ рдХреЗ рдпреЛрдЧ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ argmax рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди argminред рд▓реЙрдЧрд░рд┐рджрдо рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдмрд╣реБрдд рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрдЦреНрдпрд╛ 10 (^ - 7), рдЬрд┐рд╕реЗ рд▓рдШреБрдЧрдгрдХ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рдШреБрдЧрдгрдХ рдХреЗ рддрд░реНрдХ рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреНрдпрдерд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдЧрд╛)ред
рдХреНрд▓рд╛рд╕реАрдлрд╛рдпрд░ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреБрд░реБрд╖ рдФрд░ рдорд╣рд┐рд▓рд╛ рдирд╛рдореЛрдВ рдХреА рдПрдХ рдЪрд┐рд╣реНрдирд┐рдд рд╕реВрдЪреА рд▓реЗрдВ рдФрд░ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
def get_features(sample): return (sample[-1],)
рдлрд╝рд╛рдЗрд▓ 'name.txt' рдХреЛ
рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдореИрдВрдиреЗ рдирд╛рдо рдХреЗ рдЕрдВрддрд┐рдо рдЕрдХреНрд╖рд░ рдХреЛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ (get_features рдлрд╝рдВрдХреНрд╢рди рджреЗрдЦреЗрдВ)ред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо рдХрд╛ рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рдФрд░ рдЕрдВрддрд┐рдо рджреЛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
def get_features(sample): return ( 'll: %s' % sample[-1],
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рднрд╛рд╡рдирд╛рддреНрдордХ рд░рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдЧреНрд░рдВрдереЛрдВ рдХрд╛ рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░реАрдХреНрд╖рдг
рдореИрдВрдиреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдореВрд▓ рдорд╛рдорд▓реЗ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рд╕рдЯреАрдХрддрд╛ 96% рдереАред рдпрд╣ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред