File tree Expand file tree Collapse file tree 1 file changed +39
-3
lines changed Expand file tree Collapse file tree 1 file changed +39
-3
lines changed Original file line number Diff line number Diff line change @@ -603,9 +603,45 @@ def predict(example):
603
603
# ______________________________________________________________________________
604
604
605
605
606
- def Linearlearner (dataset ):
607
- """Fit a linear model to the data."""
608
- unimplemented ()
606
+ def Linearlearner (dataset , learning_rate = 0.01 , epochs = 100 ):
607
+ """
608
+ >>> learner = Linearlearner(data)
609
+ >>> learner(x)
610
+ y
611
+ """
612
+ idx_i = dataset .inputs
613
+ idx_t = dataset .target # As of now, dataset.target gives only one index.
614
+ examples = dataset .examples
615
+
616
+ # X transpose
617
+ X_col = [dataset .values [i ] for i in idx_i ] # vertical columns of X
618
+
619
+ # Add dummy
620
+ ones = [1 for i in range (len (examples ))]
621
+ X_col = ones + X_col
622
+
623
+ # Initialize random weigts
624
+ w = [random (- 0.5 , 0.5 ) for i in range (len (idx_i ) + 1 )]
625
+
626
+ for epoch in range (epochs ):
627
+ err = []
628
+ # Pass over all examples
629
+ for example in examples :
630
+ x = [example [i ] for i in range (idx_i )]
631
+ x = [1 ] + x
632
+ y = dotproduct (w , x )
633
+ t = example [idx_t ]
634
+ err .append (t - y )
635
+
636
+ # update weights
637
+ for i in range (len (w )):
638
+ w [i ] = w [i ] - dotproduct (err , X_col [i ])
639
+
640
+ def predict (example ):
641
+ x = [1 ] + example
642
+ return dotproduct (w , x )
643
+ return predict
644
+
609
645
# ______________________________________________________________________________
610
646
611
647
You can’t perform that action at this time.
0 commit comments