Java 为实施logistic回归模型征求意见和帮助

Java 为实施logistic回归模型征求意见和帮助,java,scala,logistic-regression,Java,Scala,Logistic Regression,我试图在Scala中实现一个简单的逻辑回归模型。也就是说,相依二元变量只有一个自变量。 如果我们看看维基百科的例子:(在“通过考试的概率与学习时间”一节下),并尝试用我当前的代码得到相同的系数θ0和θ1,我们就接近了 当方法gradientDescent中的if语句被注释掉时,θ0=-4.360295851109452,θ1=1.5166246438642796,最大迭代次数。 这与wikipedia的示例非常接近,其中θ=−4.0777和θ1=1.5046 如果If语句没有注释掉,则θ0=0.

我试图在Scala中实现一个简单的逻辑回归模型。也就是说,相依二元变量只有一个自变量。 如果我们看看维基百科的例子:(在“通过考试的概率与学习时间”一节下),并尝试用我当前的代码得到相同的系数θ0和θ1,我们就接近了

当方法gradientDescent中的if语句被注释掉时,θ0=-4.360295851109452,θ1=1.5166246438642796,最大迭代次数。 这与wikipedia的示例非常接近,其中θ=−4.0777和θ1=1.5046

如果If语句没有注释掉,则θ0=0.0和θ1=0.0,只有一个Itation表示返回立即发生。 我不知道这是为什么。虽然我甚至不确定我离一个工作模型还有多远

总的来说,我试图实现这里展示的内容: 据我所知:如果我们通过梯度下降获得最佳θ,那么我们可以将S曲线拟合到原始数据点


导入scala.collection.mutable.Buffer
导入scala.collection.mutable.ArrayBuffer
导入scala.math.exp
导入scala.math.abs
对象测试扩展了应用程序{
val logistic=新逻辑回归计算器
val yData=数组(0,0,0,0,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,1).map(z=>z.toDouble)
val xData=Array.tablate(20)({a=>0.5+a*0.25})
val thetas=逻辑派生数据(yData,扩展数据)
println(θ)
}
类逻辑回归计算器{
//学习率
私人varα=0.01
//容忍度
私有变量ε=10E-10
//迭代次数
私有变量maxIterations=1000000
def changeAlpha(newAlpha:Double)=this.alpha=newAlpha
def changeEpsilon(newEpsilon:Double)=this.epsilon=newEpsilon
def changeMaxIterations(newMaxIter:Int)=this.maxIterations=newMaxIter
def giveAlpha:Double=this.alpha
def giveEpsilon:Double=this.epsilon
def giveMaxIterations:Int=this.maxIterations
/*
*此函数适用于y值只有一个自变量的简单情况
*要么是零,要么是一。
*假设左
*/
def deriveThetas(yData:Array[Double],扩展数据:Array[Double]):Buffer[Double]={
需要(yData.size==xData.size)
//下面的轨迹将用于测试,以查看获得的值是否有意义
//val traceTheta0=Array.ofDim[Double](this.maxIterations)
//val traceetheta1=Array.ofDim[Double](this.maxIterations)
varθ0=0.0
var=θ0
varθ1=0.0
var=θ1
val dataSize=yData.size
变量计数器=0
//logistic回归的sigmoid函数形式的假设函数
定义假设(z:Double)=1.0/(1.0+exp(-z))
def deriveTheta0:Double={
var总和=0.0

这可能会更好,更适合这个可能会更好,更适合