рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рд┐рд╕реНрдЯрдо: рдкрд░реНрд▓ рдПрд╕рд╡реАрдбреА

рдкрд┐рдЫрд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рд╣рдордиреЗ рдЪрд░реНрдЪрд╛ рдХреА рдХрд┐ рдПрдХ рд╡рд┐рд▓рдХреНрд╖рдг рдЕрдкрдШрдЯрди (SVD) рдХреНрдпрд╛ рд╣реИ, рдФрд░ рд╣рдордиреЗ рдореВрд▓ рднрд╡рд┐рд╖реНрдпрд╡рдХреНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд▓рдХреНрд╖рдг рдЕрдкрдШрдЯрди рдХрд╛ рдПрдХ рдореЙрдбрд▓ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред рдкрд┐рдЫрд▓реА рдмрд╛рд░, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдорд╛рдорд▓реЗ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдкрдбреЗрдЯ рдлрд╝рд╛рд░реНрдореБрд▓реЛрдВ рдореЗрдВ рд▓рд╛ рджрд┐рдпрд╛ рдерд╛ред рдЖрдЬ рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдореЙрдбрд▓ рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реВрдВрдЧрд╛, рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рд░реЗрдЯрд┐рдВрдЧ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рдереЗред


рддреЛ, рдкрд░реНрд▓ рдореЗрдВ рдПрд╕рд╡реАрдбреАред рдПрдХ рддреИрдпрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд┐рд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
./svd.pl _ dataset.csv 
рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдореИрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рджреЗрддрд╛ рд╣реВрдБ рдЬреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реНрд╡рдпрдВ рдХрд░рддрд╛ рд╣реИред

 #  SVD: ,    while (abs($old_rmse - $rmse) > 0.00001 ) { $old_rmse = $rmse; $rmse = 0; foreach my $u ( keys %l ) { foreach my $v ( keys %{$l{$u}} ) { #   $err = $l{$u}{$v} - ($mu + $b_u[$u] + $b_v[$v] + dot($u_f[$u], $v_f[$v]) ); #    $rmse += $err * $err; #      ... $mu += $eta * $err; $b_u[$u] += $eta * ($err - $lambda2 * $b_u[$u]); $b_v[$v] += $eta * ($err - $lambda2 * $b_v[$v]); # ...    for (my $f=0; $f < $features; ++$f) { $u_f[$u][$f] += $eta * ($err * $v_f[$v][$f] - $lambda2 * $u_f[$u][$f]); $v_f[$v][$f] += $eta * ($err * $u_f[$u][$f] - $lambda2 * $v_f[$v][$f]); } } } ++$iter_no; #   ,   RMSE $rmse = sqrt($rmse / $total); print "Iteration $iter_no:\tRMSE=" . $rmse . "\n"; #  RMSE  ,     if ($rmse > $old_rmse - $threshold) { $eta = $eta * 0.66; $threshold = $threshold * 0.5; } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реИ - рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╡рдЬрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрднрд┐рд╕рд░рдг рддрдХ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрднрд┐рд╕рд░рдг RMSE (рдореВрд▓ рдорд╛рдзреНрдп рдЪреБрдХрддрд╛ рддреНрд░реБрдЯрд┐) рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдореВрд▓ рдорд╛рдзреНрдп рд╡рд░реНрдЧ рддреНрд░реБрдЯрд┐, рдЕрд░реНрдерд╛рддред рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдЪреБрдХрддрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдпреЛрдЧ рдХреА рдЬрдбрд╝ред рд╣рдо рд╕реНрдЯреЛрдХреЗрд╕реНрдЯрд┐рдХ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рд╡рдВрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рдж, рд╣рдо рддреБрд░рдВрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЬрдм рдЖрд░рдПрдордПрд╕рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕реАрдЦрдиреЗ рдХреА рдЧрддрд┐ рдХреЛ рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВ; рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрднрд┐рд╕рд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА, рдЖрд░рдПрдордПрд╕рдИ рдХреЛ рдмрджрд▓рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдпрд╣рд╛рдВ ╬╗ рдХреНрдпрд╛ рд╣реИ - рд╣рдо рдЕрдЧрд▓реА рдмрд╛рд░ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рдЖрдЬ рдпрд╣ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рд╣реЛрдЧрд╛ред

рдЕрдм рд╣рдо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рд░реЗрдЯрд┐рдВрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЧреНрд░рдВрдереЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирд╛ рдерд╛ред
рдЫрд╡рд┐
рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдСрд░реНрдбрд░ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЗрд╕ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд┐рдореНрди рдЬреИрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИред
  5 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ 5 рдпреВрдЖрд░рдПрд▓ рдкрдврд╝реЗрдВред
 Iteration 1: RMSE = 1.92845291697284
 Iteration 2: RMSE = 1.28481736445124
 Iteration 3: RMSE = 1.14159530044051
 ...
 Iteration 808: RMSE = 0.0580161117835789
 Iteration 809: RMSE = 0.0580061123741253
        рдореНрдпреВ: 2.54559533638261
 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░: 0.7271 0.1626 0.7139 1.9097 -0.9677	
 рдЖрдЗрдЯрдо рдХрд╛ рдЖрдзрд╛рд░: 0.8450 0.6593 0.2731 0.7328 0.0354	
 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
   рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0: -0.5087 -0.8326	
   рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 1: 1.0220 1.2826	
   рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 2: -0.9509 0.2792	
   рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 3: 0.1031 -0.4814	
   рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 4: 0.6095 0.0557	
 рдЖрдЗрдЯрдо рд╕реБрд╡рд┐рдзрд╛рдПрдБ:
   рдЖрдЗрдЯрдо 0: -0.8368 0.2511	
   рдЖрдЗрдЯрдо 1: 1.1101 0.4120	
   рдЖрдЗрдЯрдо 2: -0.4159 -0.4073	
   рдЖрдЗрдЯрдо 3: -0.3130 -0.9115	
   рдЖрдЗрдЯрдо 4: 0.6408 1.2205 
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛? рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд╣рдо рдЬреЛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рдереЗред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреА рджрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмреБрдирд┐рдпрд╛рджреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИрдВ: рдкреЗрдЯреНрд░реЛрд╡рд┐рдЪ рдПрдХ рджреБрд╖реНрдЯ рджрд░реНрд╢рдХ рдмрди рдЧрдпрд╛, рдФрд░ рдмрд╛рдХреА, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рджрдпрд╛рд▓реБ рдереЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЭрд╛рдиреЛрдиреНрдЪрдХрд╛ред рдлрд┐рд▓реНрдореЛрдВ рдХреЛ "рд╕рдордЧреНрд░ рдЧреБрдгрд╡рддреНрддрд╛" (рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд░реЗрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореВрд▓ рднрд╡рд┐рд╖реНрдпрд╡рдХреНрддрд╛ рдорд┐рд▓реЗред

рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк - рд╣рдореЗрдВ рджреЛ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реАрдпрддрд╛рдУрдВ рдХрд╛ рдПрдХ рдЙрдЪрд┐рдд рдЕрдкрдШрдЯрди рдорд┐рд▓рд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЦрд┐рд▓реМрдирд╛ рд╣реИ, рдФрд░ рдбрд╛рдЯрд╛рд╕реЗрдЯ рд╢реБрд░реВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдлрд┐рд▓реНрдореЛрдВ рдХреЛ "рдкрд┐рдЧрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ" рдФрд░ "рдЯреНрд░реИрдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ" рдлрд┐рд▓реНрдореЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рдХреЗ рдЕрдзрд┐рдХ рд╢реМрдХреАрди рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рд╕реБрдЕрд░ рдХреЗ рдХрд╛рд░реНрдЯрд┐рд▓реЗрдЬ рдХреА рддрд░рд╣ред

рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдХрд╛рд░рдХ рдХрд┐рддрдирд╛ рдЯреНрд░реИрдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдХрд╛рд░рдХ рдХрд┐рддрдирд╛ рд╕реВрдЕрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ; рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдХреЛрдИ рдЧрд╣рд░рд╛ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИ; рдХреЗрд╡рд▓ рдЙрдирдХрд╛ рдЕрдиреБрдкрд╛рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдлрд┐рдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЬреАрдм рдорд╛рдорд▓рд╛ рдерд╛: рдПрд╕рд╡реАрдбреА рдиреЗ рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП "рдЯреНрд░реИрдХреНрдЯрд░реНрд╕" рдХрд╛рд░рдХреЛрдВ рдХреЗ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рдиреЛрдВ рдХреЛ рд╕рд┐рдЦрд╛рдпрд╛, рдЬреЛ рдЯреНрд░реИрдХреНрдЯрд░, рд╡рд╛рд╕реНрдпрд╛ рдФрд░ рд╡реЗрд▓реЗрд░рд┐рдХрд╛ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, SVD рдиреЗ рдлрд┐рд▓реНрдореЛрдВ рд╕реЗ "рдЯреНрд░реИрдХреНрдЯрд░" рдХрд╛рд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд╕рд┐рдЦрд╛рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреНрд░реИрдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВ - рдорд╛рдЗрдирд╕ рдорд╛рдЗрдирд╕ рдПрдХ рдкреНрд▓рд╕ рджреЗрдЧрд╛ред рдФрд░ рдкреЗрдЯреНрд░рд╛ рдХреЗ 1.0220 рдмрд╕, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдЯреНрд░реИрдХреНрдЯрд░ рд╕реВрдЕрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ ...

рдЕрдм рд╣рдо рдЯреНрд░реИрдХреНрдЯрд░ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрдпрд╛ рдХреА рд░реЗрдЯрд┐рдВрдЧ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ
  2.5456 + 0.7271 + 0.8450 + (-0.5087) * (- 0.8368) + (-0.8326) * 0.2511 = 4.3343143ред 

рдЦреИрд░, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕рд╛ рдЯреНрд░реИрдХреНрдЯрд░ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░реЗрдЧрд╛ред

рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рд╣рдо рдУрд╡рд░рдлрд╝рд┐рдЯрд┐рдВрдЧ рдФрд░ рдирд┐рдпрдорд┐рддреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ - рдпрд╣ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрд╕рд╡реАрдбреА рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

Source: https://habr.com/ru/post/In141959/


All Articles