/**
* 感知器分類:隨機梯度下降演算法求解。
* 感知器是乙個線性二分類器: y = (w)t·x + b 最優化可以求解w和b。
* * 損失函式:l(w,b) = 求和(i(yi != wt·xi + b) * yi(wt·xi + b))
* * 輸入: double[m][n] data 每行表示乙個樣本,每行是乙個n維的特徵向量。總共有m個樣本。
* int[m] label 長度為m的
* * 輸出:new perceptron
*
*@author huangyongye
* */
public
class
perceptron
/*** 模型訓練:通過梯度下降求解模型引數w向量和b
*@param trian_datas :輸入特徵矩陣
*@param labels :訓練資料的類標
*@param alpha: 步長
*@throws exception
*/public
void
train(double train_datas, int labels, double alpha) throws exception
}if(!flag) }}
/**
* sign函式
*@param dist
*@return
*/private
intsign(double dist)
/*** 點乘
*@param a
*@param b
*@return
*/private
double
docmul(double a, double b) throws exception
return sum;
}private
double
update_b(double b, int labeli, double alpha)
private
void
update_w(double w, double ts, int labeli, double alpha)
}public
inttest_one(double test_data) throws exception
public
int test_list(double test_datas) throws exception
return labels;
}public
static
void
main(string args) throws exception , , , , , , , , };
int labels = ;
*/double data = ,, };
int labels = ;
perceptron ptest = new perceptron(1000);
double alpha = 0.1;
ptest.train(data, labels, alpha);
double w = ptest.w;
system.out.print("parameter w is : ");
for(double d: w)
system.out.print(d + " ");
system.out.println("\nparameter b: " + ptest.b + "\n");
double test_case = ; // -1
double test_case2 = ; // 1
int label1 = ptest.test_one(test_case);
system.out.println("label1: " + label1);
int label2 = ptest.test_one(test_case2);
system.out.println("label2: " + label2);
}}
感知器的scala實現
其實感知器學習演算法,就是利用第一節介紹的單層感知器。首先利用給的正確資料,計算得到輸出值,將輸出值和正確的值相比,由此來調整每乙個輸出端上的權值。公式便是用來調整權值,首先 是乙個 學習引數 一般我將它設定成小於1的正數。t便是訓練資料中的正確結果,便是第i個輸入端的輸入值,便是第i個輸入端上面的...
感知器的scala實現
其實感知器學習演算法,就是利用第一節介紹的單層感知器。首先利用給的正確資料,計算得到輸出值,將輸出值和正確的值相比,由此來調整每乙個輸出端上的權值。公式便是用來調整權值,首先 是乙個 學習引數 一般我將它設定成小於1的正數。t便是訓練資料中的正確結果,便是第i個輸入端的輸入值,便是第i個輸入端上面的...
python 實現感知器(一)
基礎知識不再重述,可參考 coding utf 8 這裡定義乙個感知器的類 class perceptron object def init self,input num,activator 初始化感知器,設定輸入引數的個數,以及啟用函式。啟用函式的型別為double double self.act...