感知机的前提是假定数据集线性可分,通过不断更新w,b的值使损失函数最小。
感知机学习算法的原始形式代码如下:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Sensor_1 {
public static int []w= new int[2];
public static int b=0;
public static int t=0;
public static int learning(Map map){
Iterator<Map.Entry<int[], Integer>> it = map.entrySet().iterator();
int []x=new int[2];
int y=0;
while (it.hasNext()) {
Map.Entry<int[], Integer> entry = it.next();
y=entry.getValue();
x=entry.getKey();
if(y*(w[0]*x[0]+w[1]*x[1]+b)<=0){
t++;
w[0]=w[0]+y*x[0];
w[1]=w[1]+y*x[1];
b=b+y;
System.out.println("w= " + w[0] +","+w[1]+ "; b=" + b);
}
}
return t;
}
public static void main(String args[]){
Map<int[],Integer>instance = new HashMap<int[],Integer>();
int [][]x1={{3,3},{4,3},{1,1}};
instance.put(x1[0], 1);
instance.put(x1[1], 1);
instance.put(x1[2], -1);
int t2=learning(instance);
while(t2>0){
t=0;
t2=learning(instance);
}
}
}
这里也可直接使用数组,不用map