神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,最左邊的是輸入層,最右邊的是輸出層,中間是多個(gè)隱含層,對于隱含層和輸出層的每個(gè)神經(jīng)節(jié)點(diǎn),都是由上一層節(jié)點(diǎn)乘以其權(quán)重累加得到,標(biāo)上“+1”的圓圈為截距項(xiàng)b,對輸入層外每個(gè)節(jié)點(diǎn):Y=w0*x0+w1*x1+...+wn*xn+b,由此我們可以知道神經(jīng)網(wǎng)絡(luò)相當(dāng)于一個(gè)多層邏輯回歸的結(jié)構(gòu)。
創(chuàng)新互聯(lián)建站執(zhí)著的堅(jiān)持網(wǎng)站建設(shè),微信平臺小程序開發(fā);我們不會轉(zhuǎn)行,已經(jīng)持續(xù)穩(wěn)定運(yùn)營10多年。專業(yè)的技術(shù),豐富的成功經(jīng)驗(yàn)和創(chuàng)作思維,提供一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。
import java.util.Random;
public class BpDeep{
public double[][] layer;//神經(jīng)網(wǎng)絡(luò)各層節(jié)點(diǎn)
public double[][] layerErr;//神經(jīng)網(wǎng)絡(luò)各節(jié)點(diǎn)誤差
public double[][][] layer_weight;//各層節(jié)點(diǎn)權(quán)重
public double[][][] layer_weight_delta;//各層節(jié)點(diǎn)權(quán)重動量
public double mobp;//動量系數(shù)
public double rate;//學(xué)習(xí)系數(shù)
public BpDeep(int[] layernum, double rate, double mobp){
this.mobp = mobp;
this.rate = rate;
layer = new double[layernum.length][];
layerErr = new double[layernum.length][];
layer_weight = new double[layernum.length][][];
layer_weight_delta = new double[layernum.length][][];
Random random = new Random();
for(int l=0;llayernum.length;l++){
layer[l]=new double[layernum[l]];
layerErr[l]=new double[layernum[l]];
if(l+1layernum.length){
layer_weight[l]=new double[layernum[l]+1][layernum[l+1]];
layer_weight_delta[l]=new double[layernum[l]+1][layernum[l+1]];
for(int j=0;jlayernum[l]+1;j++)
for(int i=0;ilayernum[l+1];i++)
layer_weight[l][j][i]=random.nextDouble();//隨機(jī)初始化權(quán)重
}
}
}
//逐層向前計(jì)算輸出
public double[] computeOut(double[] in){
for(int l=1;llayer.length;l++){
for(int j=0;jlayer[l].length;j++){
double z=layer_weight[l-1][layer[l-1].length][j];
for(int i=0;ilayer[l-1].length;i++){
layer[l-1][i]=l==1?in[i]:layer[l-1][i];
z+=layer_weight[l-1][i][j]*layer[l-1][i];
}
layer[l][j]=1/(1+Math.exp(-z));
}
}
return layer[layer.length-1];
}
//逐層反向計(jì)算誤差并修改權(quán)重
public void updateWeight(double[] tar){
int l=layer.length-1;
for(int j=0;jlayerErr[l].length;j++)
layerErr[l][j]=layer[l][j]*(1-layer[l][j])*(tar[j]-layer[l][j]);
while(l--0){
for(int j=0;jlayerErr[l].length;j++){
double z = 0.0;
for(int i=0;ilayerErr[l+1].length;i++){
z=z+l0?layerErr[l+1][i]*layer_weight[l][j][i]:0;
layer_weight_delta[l][j][i]= mobp*layer_weight_delta[l][j][i]+rate*layerErr[l+1][i]*layer[l][j];//隱含層動量調(diào)整
layer_weight[l][j][i]+=layer_weight_delta[l][j][i];//隱含層權(quán)重調(diào)整
if(j==layerErr[l].length-1){
layer_weight_delta[l][j+1][i]= mobp*layer_weight_delta[l][j+1][i]+rate*layerErr[l+1][i];//截距動量調(diào)整
layer_weight[l][j+1][i]+=layer_weight_delta[l][j+1][i];//截距權(quán)重調(diào)整
}
}
layerErr[l][j]=z*layer[l][j]*(1-layer[l][j]);//記錄誤差
}
}
}
public void train(double[] in, double[] tar){
double[] out = computeOut(in);
updateWeight(tar);
}
}
步驟如下:
1、把自己需要分析的數(shù)據(jù)導(dǎo)入到SPSS,點(diǎn)擊左上角的文件進(jìn)行打開,選擇彈出對話框中的數(shù)據(jù)。
2、點(diǎn)擊工具欄上的分析,依次選擇回歸,然后選擇“多項(xiàng)Logistic” 多元線性回歸分析和logistic回歸分析都可以的。
3、把變量依次移動到右側(cè)的因變量、因子和協(xié)變量框內(nèi)。
4、就可以在度量標(biāo)準(zhǔn)中看到度量數(shù)據(jù)。
5、再對多項(xiàng)邏輯回歸的模型、統(tǒng)計(jì)量、條件、選項(xiàng)和保存進(jìn)行設(shè)置。
6、點(diǎn)擊確定,即可用SPSS把多因素Logistic回歸分析做好。
多因素logistic回歸是指包含的研究因素較多,如二項(xiàng)logistic回歸、多項(xiàng)Logistic回歸等。
回答于?2022-05-05
1 java 開發(fā)需要學(xué)什么
學(xué)習(xí)java是一件枯燥的事,如果你想要學(xué)java就應(yīng)該靜下心來學(xué),也要付出一點(diǎn)努力,畢竟java是一門熱門的編程語言,前景很好。那么下面小編給大家說說java開發(fā)需要學(xué)什么,希望能對你有所幫助。
1、 java語法。
通過任何一本Java入門書籍,都可以學(xué)會Java的基本語法。千萬不要認(rèn)為,你把書上的例子程序都能寫出來就算學(xué)會了Java語法。要想真正掌握,還需要做大量的測試題。對語法不準(zhǔn)確的理解,會使你寫的代碼出現(xiàn)邏輯錯(cuò)誤。而這些錯(cuò)誤會使你在真正的項(xiàng)目開發(fā)中吃盡苦頭:你認(rèn)為正確才會寫上去。而在幾十萬行代碼中找出幾行有邏輯錯(cuò)誤的代碼,非常困難。因?yàn)槟銕缀醪粫岩赡阏J(rèn)為正確的代碼存在錯(cuò)誤。
2、 常用類。
永遠(yuǎn)不要寫別人已經(jīng)實(shí)現(xiàn)的代碼。有很多功能,用JDK中現(xiàn)有的類就可以完成。你需要熟悉JDK.可以通過研究JDK幫助文檔和JDK源代碼的方式,逐漸了解,你需要的類都在什么地方。一方面,要熟悉有哪些可以直接使用的資源,另一方面,學(xué)習(xí)一下,SUN公司的工程師怎樣寫代碼。
3、 IDE 集成開發(fā)環(huán)境。
現(xiàn)在企業(yè)最常用的是IBM公司的eclipse ,類似的還有JBuilder 、Idea,NetBeans等等。畢竟,只有5%的頂尖高手在使用簡單的文本編輯器在寫Java代碼。多數(shù)程序員都是在使用這些東西。
4、 數(shù)據(jù)庫。
MySql,Oracle,DB2.小項(xiàng)目多數(shù)使用MySql這樣的免費(fèi)數(shù)據(jù)庫。大一些的項(xiàng)目會考慮使用Oracle或者DB2. Java項(xiàng)目很少使用SqlServer。因此,你還需要學(xué)習(xí)數(shù)據(jù)庫方面的一些知識??梢詮腟QL語言開始。這些數(shù)據(jù)庫都支持標(biāo)準(zhǔn)SQL.學(xué)會基本的SQL,參考具體的數(shù)據(jù)庫手冊,就可以完成一般的項(xiàng)目開發(fā)了。當(dāng)然,要想使你的程序運(yùn)行的效率更高,需要更深入的學(xué)習(xí)。大部分的程序優(yōu)化,都是從這部分開始的。
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
%GRADIENTDESCENT Performs gradient descent to learn theta
% theta = GRADIENTDESENT(X, y, theta, alpha, num_iters) updates theta by
% taking num_iters gradient steps with learning rate alpha
% Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters,
% ====================== YOUR CODE HERE ======================
% Instructions: Perform a single gradient step on the parameter vector
% theta.
%
% Hint: While debugging, it can be useful to print out the values
% of the cost function (computeCost) and gradient here.
p=theta(1)-alpha*(1/m)*(sum((X*theta-y).*X(:,1)));
q=theta(2)-alpha*(1/m)*(sum((X*theta-y).*X(:,2)));
theta(1)=p;
theta(2)=q;
% ============================================================
% Save the cost J in every iteration
J_history(iter) = computeCost(X, y, theta);
end