逻辑回归(LR)算法java实现转
按照机器学习实战的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实现转相关推荐
- 【机器学习算法笔记系列】逻辑回归(LR)算法详解和实战
逻辑回归(LR)算法概述 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 逻辑 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,编程语言番外篇之机器学习(项目预测模块总结:线性回归算法、逻辑回归分类算法)~整起
机器学习 一.机器学习常见算法(未完待续...) 1.算法一:线性回归算法:找一条完美的直线,完美拟合所有的点,使得直线与点的误差最小 2.算法二:逻辑回归分类算法 3.算法三:贝叶斯分类算法 4.算 ...
- 【机器学习】Logistic Regression逻辑回归原理与java实现
[机器学习]Logistic Regression逻辑回归原理与java实现 1.基于概率的机器学习算法 2.逻辑回归算法原理 2.1.分离超平面 2.2.阈值函数 2.3.样本概率 2.4.损失函数 ...
- python机器学习案例系列教程——逻辑分类/逻辑回归LR/一般线性回归(softmax回归)
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 线性函数.线性回归 参考:http://blog.csdn.net/luanpeng825485697/article/details ...
- 逻辑回归LR vs 支持向量机SVM
目录 LR vs SVM LR和SVM的相同点 LR和SVM的不同点 逻辑回归LR LR损失函数 LR公式推导 支持向量机SVM 间隔和支持向量 对偶问题 核函数 软间隔和正则化 LR vs SVM ...
- 推荐系统(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 <深度学习/推 ...
- 逻辑回归模型算法研究与案例分析
逻辑回归模型算法研究与案例分析 (白宁超 2018年9月6日15: 21:20) 导读:逻辑回归(Logistic regression)即逻辑模型,属于常见的一种分类算法.本文将从理论介绍开始,搞清 ...
- R语言使用逻辑回归分类算法
R语言使用逻辑回归分类算法 逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个特征进行类别标号预测.在R语言中可以通过调用logit函数执行逻辑回归分类算法并预测输出概率.通过调用glm函数 ...
- 一步步教你轻松学逻辑回归模型算法
一步步教你轻松学逻辑回归模型算法 ( 白宁超2018年9月6日15: 01:20) 导读:逻辑回归(Logistic regression)即逻辑模型,属于常见的一种分类算法.本文将从理论介绍开始,搞 ...
- ML之LoR:逻辑回归LoR算法的简介、应用、经典案例之详细攻略
ML之LoR:逻辑回归LoR算法的简介.应用.经典案例之详细攻略 目录 逻辑回归LoR算法的简介 1.LOR算法在经过严密的数据预处理后效果会非常好 2.LoR模型的优缺点 逻辑回归LoR算法的应用 ...
最新文章
- CentOS 6.5下SSH总提示Warning: Permanently added '****' (RSA) to the list of known hosts.
- cat、tac、more、less、head、tail、cut
- 如何才能写好一篇文章?
- oracle 启动监听提示 :The listener supports no services
- ThreadLocal的理解
- php 版本排序,四种常见排序算法--PHP版本
- 宽带和流量是分开的吗_为什么现在的手机套餐与宽带越来越贵,只是因为建设5G吗?...
- JDK源码(20)-Thread
- 高中计算机课程打字网址,信息课
- java JDK 8 官网下载网址/清华镜像/华为镜像
- 最长回文子串 马拉车算法
- 联想计算机拆机,一拆到底~联想昭阳E46L彻底拆解,163P!
- 单片机管脚工作状态的解释
- stm32f103 ds18B20 驱动及芯片资料
- 一位阿里p9的自述——关于年薪和资产
- 三、项目进度管理(输入/工具与技术/输出)
- cadence学习笔记 从ultra librarain网站下载封装并生成封装文件
- 微信朋友圈输入框加发送测试用例总结
- Linux 服务器挂载移动硬盘进行数据拷贝
- 组件分享之后端组件——用于将日志写入滚动文件的组件包lumberjack