以前はRとMATLABを使っていましたが、Scalaにとっては比較的新しいです。 Scalaで次のコードを書いています。私はRとMATLABに同じコードを書いていますが、どちらもうまくいきますが、Scalaの経験がないため、以下のコードは機能しません。別の関数でスカラ関数を参照しています
import breeze.linalg._
import breeze.numerics.exp
import scala.math.log
val data = breeze.stats.distributions.Uniform(0, 1)
val ep: DenseMatrix[Double] = DenseMatrix.rand(39, 3, data).t
val a = DenseVector(1.0)
val out: DenseMatrix[Double] = tile(a, 1, 39)
val fout: DenseVector[Double] = out.toDenseVector
val A: Double = 0.0
val B: Double = 1.0
val eta: Double = 2.0/Math.pow(B - A, 2.0)
val nCol: Int = 39
val nRow: Int = 3
var gA = 0.0
var gB = 0.0
var gamma = 0.0
def SubstFunction(predictions: DenseVector[Double], expertsPrediction: DenseVector[Double]): Double = {
gA = -(1/eta) * log(predictions dot exp(-eta * (expertsPrediction :- A)) :^ 2.0)
gB = -(1/eta) * log(predictions dot exp(-eta * (expertsPrediction :- B)) :^ 2.0)
gamma = (0.5 * (B + A)) - ((gB - gA)/2 * (B - A))
gamma
}
def prediction(Input: DenseMatrix[Double], outcomes: DenseVector[Double]): DenseVector[Double] = {
var weights = DenseVector(1.0,1.0,1.0)
val AAprediction = DenseVector.fill(nCol)(0.0)
//DenseVector.ones[Double](nCol).t
for (l<-0 to Input.cols) {
val normalisedWeights = weights/sum(weights)
AAprediction(l) = SubstFunction(normalisedWeights, Input(::,l))
weights = normalisedWeights :* exp(eta :* (Input(::,l) :- outcomes(l)) :^ 2.0).toDenseVector
}
AAprediction: DenseVector[Double]
}
prediction(ep,fout)
予測がsbstFunction
となっている場合があります。私はintelliJでScalaワークシートを使用しています。私は、コードを実行すると、私はエラーを取得していないが、私は数値出力を得ることはありません代わりに私が手:
<function1> res1: Unit =()
更新:
:私は、コードを固定しているし、今私は、次のエラーを取得していますColumn must be in bounds for slice!
誰かが私が間違っていることを理解できるように助けてくれますか?
これを行うと、私のコードにはいくつかの問題が発生し、おそらくそれは私のコードが正しくないことを意味します。助けてくれてありがとう。 – Jamil