按照机器学习实战的python代码,用java重写LR的梯度上升算法:

package com.log;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import Jama.Matrix;

public class LogProcess {
    /**
     * 获取特征数据
     */
    public Matrix getDataMat(){
        try {
            ArrayList<double[]> list = new ArrayList<double[]>(); 
            String pathname = "C:\\testSet.txt";
            File filename = new File(pathname);

InputStreamReader reader = new InputStreamReader(
                    new FileInputStream(filename));
            BufferedReader br = new BufferedReader(reader);

String line = "";
            line = br.readLine();            
            
            while (line != null) {                    
                String [] tmp=line.split("\t");
                double [] value=new double[3];
                value[0]=1.0;
                value[1]=Double.parseDouble(tmp[0]);
                value[2]=Double.parseDouble(tmp[1]);
                list.add(value);
            
                line = br.readLine(); // 一次读入一行数据    
            }
            
            
            //特征转化为二维数组
            Iterator<double[]> datalIt = list.iterator();
            double [][] data = new double[list.size()][3];
            int i=0;
            while (datalIt.hasNext()) {
                double [] tmp = datalIt.next();
                data[i][0]=tmp[0];
                data[i][1]=tmp[1];
                data[i][2]=tmp[2];
                i++;
            }        
            
            Matrix dataMatrix = new Matrix(data);
                        
            return dataMatrix;
        } catch (Exception e) {  
            e.printStackTrace();  
            return null;
        }          
    }
    
    /**
     * 获取标签数据
     */
    public Matrix getLabelMat(){
        try {
            ArrayList<int[]> list = new ArrayList<int[]>(); 
            String pathname = "C:\\testSet.txt";
            File filename = new File(pathname);

InputStreamReader reader = new InputStreamReader(
                    new FileInputStream(filename));
            BufferedReader br = new BufferedReader(reader);

String line = "";
            line = br.readLine();            
            
            while (line != null) {                    
                String [] tmp=line.split("\t");
                int [] value=new int[1];
                value[0]=Integer.parseInt(tmp[2]);
                list.add(value);
                
                line = br.readLine(); // 一次读入一行数据    
            }
                        
            //将标签转化为二维数组
            Iterator<int[]> labelIt = list.iterator();
            double [][] label = new double[list.size()][1];
            int j=0;
            while (labelIt.hasNext()) {
                label[j][0]=labelIt.next()[0];
                j++;
            }        
            
            Matrix labelMatrix = new Matrix(label);
            
            return labelMatrix;
        } catch (Exception e) {  
            e.printStackTrace();  
            return null;
        }          
    }
        
    /**
     * sigmoid函数
     */
    public Matrix sigmoid(Matrix intX){
        double [][] tmp = new double[intX.getRowDimension()][intX.getColumnDimension()];
        for(int i=0;i<intX.getRowDimension();i++){
            tmp[i][0]=1.0/(1+Math.exp(intX.get(i, 0)));
        }
        
        Matrix tmpMat = new Matrix(tmp);
        return tmpMat;
    }
    
    public static void main(String [] args){
        LogProcess lr = new LogProcess();
        //特征矩阵mXn
        Matrix dataMat= lr.getDataMat();    
        //标签矩阵m
        Matrix labelMat= lr.getLabelMat();
        //获取维数
        int m=dataMat.getRowDimension();
        int n=dataMat.getColumnDimension();
        
        //步长
        double alpha=0.001;
        //迭代次数
        int maxCycles=500;
        //weights权重列向量
        double [][] weight=new double[3][1];
        weight[0][0]=1;
        weight[1][0]=1;
        weight[2][0]=1;
        Matrix weightMat = new Matrix(weight);
        
        //X*weight
        Matrix mm ;
        Matrix h;    
        Matrix e;
        
        //
        for(int i=1;i<maxCycles;i++){
            mm = dataMat.times(weightMat).times(-1);
            h = lr.sigmoid(mm);
            e = labelMat.minus(h);            
            weightMat = weightMat.plus(dataMat.transpose().times(e).times(alpha));        
            
            System.out.println("-------------------"+i+"------------------");
            for(int j=0;j<weightMat.getRowDimension();j++){
                System.out.println(weightMat.get(j, 0));
            }
        }    
        
        //预测
//        weight[0][0]=4.1207114;
//        weight[1][0]=0.4797796;
//        weight[2][0]=-0.6164160;
//        weightMat = new Matrix(weight);
//        
//        mm=dataMat.times(weightMat).times(-1);
//        h = lr.sigmoid(mm);
//        for(int j=0;j<h.getRowDimension();j++){
//            System.out.println(h.get(j, 0));
//        }
    }
}

结果:
-------------------497------------------
4.113833123773871
0.4791907707938691
-0.6155500125688206
-------------------498------------------
4.117274671999083
0.4794854588393607
-0.6159833243190651
-------------------499------------------
4.12071145578144
0.47977963228916215
-0.6164160518933434

逻辑回归(LR)算法java实现转相关推荐

  1. 【机器学习算法笔记系列】逻辑回归(LR)算法详解和实战

    逻辑回归(LR)算法概述 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 逻辑 ...

  2. java基础巩固-宇宙第一AiYWM:为了维持生计,编程语言番外篇之机器学习(项目预测模块总结:线性回归算法、逻辑回归分类算法)~整起

    机器学习 一.机器学习常见算法(未完待续...) 1.算法一:线性回归算法:找一条完美的直线,完美拟合所有的点,使得直线与点的误差最小 2.算法二:逻辑回归分类算法 3.算法三:贝叶斯分类算法 4.算 ...

  3. 【机器学习】Logistic Regression逻辑回归原理与java实现

    [机器学习]Logistic Regression逻辑回归原理与java实现 1.基于概率的机器学习算法 2.逻辑回归算法原理 2.1.分离超平面 2.2.阈值函数 2.3.样本概率 2.4.损失函数 ...

  4. python机器学习案例系列教程——逻辑分类/逻辑回归LR/一般线性回归(softmax回归)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 线性函数.线性回归 参考:http://blog.csdn.net/luanpeng825485697/article/details ...

  5. 逻辑回归LR vs 支持向量机SVM

    目录 LR vs SVM LR和SVM的相同点 LR和SVM的不同点 逻辑回归LR LR损失函数 LR公式推导 支持向量机SVM 间隔和支持向量 对偶问题 核函数 软间隔和正则化 LR vs SVM ...

  6. 推荐系统(4)-逻辑回归LR、POLY2、FM、FFM

    逻辑回归LR.POLY2.FM.FFM 1.逻辑回归LR 2.辛普森悖论 3.POLY2 4.FM-2010 5.FFM 6.GBDT+LR-2014 7.LS-PLM-2017 <深度学习/推 ...

  7. 逻辑回归模型算法研究与案例分析

    逻辑回归模型算法研究与案例分析 (白宁超 2018年9月6日15: 21:20) 导读:逻辑回归(Logistic regression)即逻辑模型,属于常见的一种分类算法.本文将从理论介绍开始,搞清 ...

  8. R语言使用逻辑回归分类算法

    R语言使用逻辑回归分类算法 逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个特征进行类别标号预测.在R语言中可以通过调用logit函数执行逻辑回归分类算法并预测输出概率.通过调用glm函数 ...

  9. 一步步教你轻松学逻辑回归模型算法

    一步步教你轻松学逻辑回归模型算法 ( 白宁超2018年9月6日15: 01:20) 导读:逻辑回归(Logistic regression)即逻辑模型,属于常见的一种分类算法.本文将从理论介绍开始,搞 ...

  10. ML之LoR:逻辑回归LoR算法的简介、应用、经典案例之详细攻略

    ML之LoR:逻辑回归LoR算法的简介.应用.经典案例之详细攻略 目录 逻辑回归LoR算法的简介 1.LOR算法在经过严密的数据预处理后效果会非常好 2.LoR模型的优缺点 逻辑回归LoR算法的应用 ...

最新文章

  1. CentOS 6.5下SSH总提示Warning: Permanently added '****' (RSA) to the list of known hosts.
  2. cat、tac、more、less、head、tail、cut
  3. 如何才能写好一篇文章?
  4. oracle 启动监听提示 :The listener supports no services
  5. ThreadLocal的理解
  6. php 版本排序,四种常见排序算法--PHP版本
  7. 宽带和流量是分开的吗_为什么现在的手机套餐与宽带越来越贵,只是因为建设5G吗?...
  8. JDK源码(20)-Thread
  9. 高中计算机课程打字网址,信息课
  10. java JDK 8 官网下载网址/清华镜像/华为镜像
  11. 最长回文子串 马拉车算法
  12. 联想计算机拆机,一拆到底~联想昭阳E46L彻底拆解,163P!
  13. 单片机管脚工作状态的解释
  14. stm32f103 ds18B20 驱动及芯片资料
  15. 一位阿里p9的自述——关于年薪和资产
  16. 三、项目进度管理(输入/工具与技术/输出)
  17. cadence学习笔记 从ultra librarain网站下载封装并生成封装文件
  18. 微信朋友圈输入框加发送测试用例总结
  19. Linux 服务器挂载移动硬盘进行数据拷贝
  20. 组件分享之后端组件——用于将日志写入滚动文件的组件包lumberjack

热门文章

  1. linux服务器生成密钥后无法登陆,securecrt用密钥安全登陆服务器
  2. java常量池在哪里_Java常量池详细说明
  3. FFmpeg 的AVCodecContext结构体详解
  4. 【labelme】制作标签数据的完整流程
  5. (完整体系教程)使用 Arduino 控制伺服电机
  6. uml通信图画法_UML各种图画法总结
  7. java游戏项目超级马里奥
  8. 正点原子战舰(STM32F103ZET6) 跑蓝牙协议栈 --传统蓝牙搜索演示以及实现原理
  9. 支持向量机SVM思维导图
  10. 海思HI3536 H265解码处理器简介