数据挖掘--逻辑斯蒂回归的java实现(求最优点的方法用是梯度下降法)

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;




public class Logistic {
	float[] Tag;
    float[][] Var;  
	float[] beta;
	
	
	public Logistic() throws IOException{//函数作用:初始化,把文件的数据读入程序中
		BufferedReader br=new BufferedReader(new FileReader("F:/数据挖掘--算法实现/Logistic算法/testSet.txt"));
        String line="";
    	List<String> Var=new ArrayList<String>();
    	List<String> Tag=new ArrayList<String>();
        while((line=br.readLine())!=null){
        	      String[] content=line.split("	");
        	      String tmp="";
        	      for(int i=0;i<content.length-1;i++){
        		  tmp=tmp+" "+content[i];
        	  }
        	  Var.add(tmp.trim());
        	  Tag.add(content[content.length-1]);
        	}
	    	this.Tag=new float[Tag.size()];
	    	this.Var=new float[Var.size()][Var.get(0).split(" ").length+1];  
		    for(int i=0;i<Tag.size();i++){
		     	this.Var[i][0]=1.0f;
			    this.Var[i][1]=Float.parseFloat(Var.get(i).split(" ")[0]);
			    this.Var[i][2]=Float.parseFloat(Var.get(i).split(" ")[1]);
			    this.Tag[i]=Float.parseFloat(Tag.get(i));
		}
	}
	
	public float sum_exp(float x_i[],float beta[]){//函数作用:求exp(x[0]*beta[0]+...+x[j]*beta[j])其中x[0]=1
		float tmp=0;
		for(int j=0;j<x_i.length;j++){
			tmp=tmp+x_i[j]*beta[j];
			
		}
		return (float)Math.exp(tmp);
	}
	
	public float Logistic_D(float x[][],float y[],float beta[],int j){//函数作用:求最大似然函数对数的偏导数值
		float tmp=0;
		for(int i=0;i<x.length;i++){
			tmp=x[i][j]*sum_exp(x[i],beta)/(1+sum_exp(x[i],beta))-y[i]*x[i][j];
		}
		return tmp;
	}
	
	public float Logistic_D_norm(float x[][],float y[],float beta[]){//函数作用:求偏导数值的二范数值
		float tmp=0;
		for(int j=0;j<beta.length;j++){
			tmp=tmp+Logistic_D(x,y,beta,j)*Logistic_D(x,y,beta,j);
		}
		return (float)Math.sqrt(tmp);
	}
	
	public void Logistic_main(float x[][],float y[],float beta[],float a){//函数作用:梯度下降法求解最大似然函数的最小值点
		if(Logistic_D_norm(x,y,beta)<=0.01){
			this.beta=beta;
			return;
		}
		float[] beta_tmp=beta;
		for(int j=0;j<beta.length;j++){
			beta_tmp[j]=beta[j]-Logistic_D(x,y,beta,j)*a;
		}
		beta=beta_tmp;
		Logistic_main(x,y,beta,a);
	}
	
	public void Logistic_predict(float x[][],float y[],float beta[]){//函数作用输出真实值与逻辑斯蒂回归预测值
		float[] y_predict=new float[y.length];
		for(int i=0;i<y.length;i++){
			y_predict[i]=sum_exp(x[i],this.beta)/(1+sum_exp(x[i],this.beta));
			System.out.println("Actual:"+Tag[i]+"    Predict:"+y_predict[i]);
		}
		return;
	}
	
	public static void main(String[] args) throws IOException {
		Logistic a=new Logistic();
		float[] beta=a.Var[0];
		for(int i=0;i<beta.length;i++){beta[i]=0.0f;}
		a.Logistic_main(a.Var,a.Tag,beta,(float) 0.01);
		a.Logistic_predict(a.Var,a.Tag,a.beta);
	}
}

理论知识:




输入:

-0.017612 14.0530640
-1.395634 4.6625411
-0.752157 6.5386200
-1.322371 7.1528530
0.423363 11.0546770
0.406704 7.0673351
0.667394 12.7414520
-2.460150 6.8668051
0.569411 9.5487550
-0.026632 10.4277430
0.850433 6.9203341
1.347183 13.1755000
1.176813 3.1670201
-1.781871 9.0979530
-0.566606 5.7490031
0.931635 1.5895051
-0.024205 6.1518231
-0.036453 2.6909881
-0.196949 0.4441651
1.014459 5.7543991
1.985298 3.2306191
-1.693453 -0.5575401
-0.576525 11.7789220
-0.346811 -1.6787301
-2.124484 2.6724711
1.217916 9.5970150
-0.733928 9.0986870
-3.642001 -1.6180871
0.315985 3.5239531
1.416614 9.6192320
-0.386323 3.9892861
0.556921 8.2949841
1.224863 11.5873600
-1.347803 -2.4060511
1.196604 4.9518511
0.275221 9.5436470
0.470575 9.3324880
-1.889567 9.5426620
-1.527893 12.1505790
-1.185247 11.3093180
-0.445678 3.2973031
1.042222 6.1051551
-0.618787 10.3209860
1.152083 0.5484671
0.828534 2.6760451
-1.237728 10.5490330
-0.683565 -2.1661251
0.229456 5.9219381
-0.959885 11.5553360
0.492911 10.9933240
0.184992 8.7214880
-0.355715 10.3259760
-0.397822 8.0583970
0.824839 13.7303430
1.507278 5.0278661
0.099671 6.8358391
-0.344008 10.7174850
1.785928 7.7186451
-0.918801 11.5602170
-0.364009 4.7473001
-0.841722 4.1190831
0.490426 1.9605391
-0.007194 9.0757920
0.356107 12.4478630
0.342578 12.2811620
-0.810823 -1.4660181
2.530777 6.4768011
1.296683 11.6075590
0.475487 12.0400350
-0.783277 11.0097250
0.074798 11.0236500
-1.337472 0.4683391
-0.102781 13.7636510
-0.147324 2.8748461
0.518389 9.8870350
1.015399 7.5718820
-1.658086 -0.0272551
1.319944 2.1712281
2.056216 5.0199811
-0.851633 4.3756911
-1.510047 6.0619920
-1.076637 -3.1818881
1.821096 10.2839900
3.010150 8.4017661
-1.099458 1.6882741
-0.834872 -1.7338691
-0.846637 3.8490751
1.400102 12.6287810
1.752842 5.4681661
0.078557 0.0597361
0.089392 -0.7153001
1.825662 12.6938080
0.197445 9.7446380
0.126117 0.9223111
-0.679797 1.2205301
0.677983 2.5566661
0.761349 10.6938620
-2.168791 0.1436321
1.388610 9.3419970
0.317029 14.7390250

输出:

Actual:0.0    Predict:0.5606811
Actual:1.0    Predict:0.08983738
Actual:0.0    Predict:0.03744656
Actual:0.0    Predict:0.028106958
Actual:0.0    Predict:0.004135808
Actual:1.0    Predict:0.028764626
Actual:0.0    Predict:0.0018012184
Actual:1.0    Predict:0.032601494
Actual:0.0    Predict:0.008632111
Actual:0.0    Predict:0.005650719
Actual:1.0    Predict:0.030718023
Actual:0.0    Predict:0.0014445343
Actual:1.0    Predict:0.16712694
Actual:0.0    Predict:0.011023995
Actual:1.0    Predict:0.05418498
Actual:1.0    Predict:0.30441096
Actual:1.0    Predict:0.044623833
Actual:1.0    Predict:0.20444235
Actual:1.0    Predict:0.4377795
Actual:1.0    Predict:0.05319864
Actual:1.0    Predict:0.16164665
Actual:1.0    Predict:0.56443
Actual:0.0    Predict:0.0029291054
Actual:1.0    Predict:0.6893827
Actual:1.0    Predict:0.20957194
Actual:0.0    Predict:0.008373756
Actual:0.0    Predict:0.010899674
Actual:1.0    Predict:0.6904619
Actual:1.0    Predict:0.14518888
Actual:0.0    Predict:0.008266081
Actual:1.0    Predict:0.11976635
Actual:1.0    Predict:0.015893796
Actual:0.0    Predict:0.0031574024
Actual:1.0    Predict:0.7624485
Actual:1.0    Predict:0.07687254
Actual:0.0    Predict:0.008680456
Actual:0.0    Predict:0.009603223
Actual:0.0    Predict:0.008884382
Actual:0.0    Predict:0.0024648989
Actual:0.0    Predict:0.0037125102
Actual:1.0    Predict:0.1606882
Actual:1.0    Predict:0.045124844
Actual:0.0    Predict:0.005991301
Actual:1.0    Predict:0.42168543
Actual:1.0    Predict:0.20414893
Actual:0.0    Predict:0.0053931167
Actual:1.0    Predict:0.73902637
Actual:1.0    Predict:0.04958199
Actual:0.0    Predict:0.0032823293
Actual:0.0    Predict:0.0042590536
Actual:0.0    Predict:0.012971083
Actual:0.0    Predict:0.005960136
Actual:0.0    Predict:0.018001493
Actual:0.0    Predict:0.0011055288
Actual:1.0    Predict:0.07403084
Actual:1.0    Predict:0.032229148
Actual:0.0    Predict:0.0049191834
Actual:1.0    Predict:0.020736596
Actual:0.0    Predict:0.0032730496
Actual:1.0    Predict:0.08562134
Actual:1.0    Predict:0.113672785
Actual:1.0    Predict:0.26805925
Actual:0.0    Predict:0.010938313
Actual:0.0    Predict:0.0020877975
Actual:0.0    Predict:0.002266411
Actual:1.0    Predict:0.6676025
Actual:1.0    Predict:0.0372906
Actual:0.0    Predict:0.0031238655
Actual:0.0    Predict:0.0025479672
Actual:0.0    Predict:0.004282208
Actual:0.0    Predict:0.0042147175
Actual:1.0    Predict:0.43782312
Actual:0.0    Predict:0.0010982874
Actual:1.0    Predict:0.19028516
Actual:0.0    Predict:0.0073206644
Actual:0.0    Predict:0.022435196
Actual:1.0    Predict:0.49938652
Actual:1.0    Predict:0.24655403
Actual:1.0    Predict:0.07389847
Actual:1.0    Predict:0.10155429
Actual:0.0    Predict:0.047252834
Actual:1.0    Predict:0.8242609
Actual:0.0    Predict:0.0059460304
Actual:1.0    Predict:0.014710011
Actual:1.0    Predict:0.2986962
Actual:1.0    Predict:0.69626415
Actual:1.0    Predict:0.1277843
Actual:0.0    Predict:0.0018891313
Actual:1.0    Predict:0.06032025
Actual:1.0    Predict:0.48407716
Actual:1.0    Predict:0.5788336
Actual:0.0    Predict:0.0018214632
Actual:0.0    Predict:0.007875008
Actual:1.0    Predict:0.38009217
Actual:1.0    Predict:0.3480705
Actual:1.0    Predict:0.2141388
Actual:0.0    Predict:0.0049188123
Actual:1.0    Predict:0.4797042
Actual:0.0    Predict:0.009467098
Actual:0.0    Predict:6.76526E-4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值