scalaNLPのbreezeツール体験
6012 ワード
scalaNLPは機械学習と数値計算に用いられるscalaツールライブラリであり,ビッグデータ解析ツールsparkが統合している.
BreezeとEpicの2つのツールが含まれており,前者は機械学習と数値計算に適しており,後者は統計解析予測に用いることができる.
今日は少し時間をかけてbreezeというツールを初歩的に理解しました.
ベクトルと行列の作成
現在のコンピュータ数学はベクトルとマトリクス、特に機械学習から離れられないので、このようなツールに対して、マトリクスとベクトルを創造し、そのいくつかの4つの演算に便利な方法を提供することが最も重要です.
matlabのように、直接字面量で構築することもできるし、簡単に特殊なマトリクスを作成することもできるし、numpyのように簡単な方法で構築することもできる.例えばnp.arange(0,30,2)は、もちろんbreezeはscala言語の特性に限られ、scala言語の特性も十分に利用され、ベクトルを作成する簡単な方法を提供しています.
次はnumpyとの対比です
Operation
Breeze
Numpy
Zeroed matrix
Zeroed vector
Vector of ones
Vector of particular number
n element range
Identity matrix
Diagonal matrix
Matrix inline creation
Column vector inline creation
Row vector inline creation
Vector from function
Matrix from function
Vector creation from array
Matrix creation from array
Vector of random elements from 0 to 1
Matrix of random elements from 0 to 1
numpy私は実際に使ったことがなくて、図の中から比較して、実は両者の作成はすべてとても便利で、実はimport breeze.linalg.DenseVector._ DenseVectorは省略できます.(ただし他の方法と衝突しないように注意してください)
簡単な使用例
使いやすいです.
マトリックスベクトルのいくつかの基本演算
ここで同じように比較してみましょう
Operation
Breeze
Matlab
Numpy
Elementwise addition
Elementwise multiplication
Elementwise comparison
Inplace addition
Inplace elementwise multiplication
Vector dot product
Elementwise sum
Elementwise max
Elementwise argmax
Ceiling
Floor
実はここに皆さんが望んでいる演算がなければ、あるいは皆さんがこれらに詳しくなければ、breezeのマトリクスやベクトルもmap、reduceなどの操作を提供しています.
いくつかの例:
上記の結果
Broadcasting
マトリクスの各行または列を単位として演算したい場合があります.たとえば、次の例です.
結果
かくりつぶんぷ
breezeにはポアソン分布,正規分布など多くの確率分布が内蔵されている.
結果
締めくくり
breezeはまだ多くの机能があって、私のいくつかの高等数学の知识はすべて先生に返して、これらの机能に対してあまり深く研究していないで、时间に限られて、ケースを书きたくなくて、みんなは公式のドキュメントを见て、ドキュメントの书くのはとても简洁で、入门はとても简単で、兴味のあるのは见てみることができます.
BreezeとEpicの2つのツールが含まれており,前者は機械学習と数値計算に適しており,後者は統計解析予測に用いることができる.
今日は少し時間をかけてbreezeというツールを初歩的に理解しました.
ベクトルと行列の作成
現在のコンピュータ数学はベクトルとマトリクス、特に機械学習から離れられないので、このようなツールに対して、マトリクスとベクトルを創造し、そのいくつかの4つの演算に便利な方法を提供することが最も重要です.
matlabのように、直接字面量で構築することもできるし、簡単に特殊なマトリクスを作成することもできるし、numpyのように簡単な方法で構築することもできる.例えばnp.arange(0,30,2)は、もちろんbreezeはscala言語の特性に限られ、scala言語の特性も十分に利用され、ベクトルを作成する簡単な方法を提供しています.
次はnumpyとの対比です
Operation
Breeze
Numpy
Zeroed matrix
DenseMatrix.zeros[Double](n,m)
zeros((n,m))
Zeroed vector
DenseVector.zeros[Double](n)
zeros(n)
Vector of ones
DenseVector.ones[Double](n)
ones(n)
Vector of particular number
DenseVector.fill(n){5.0}
ones(n) * 5
n element range
linspace(start,stop,numvals)
Identity matrix
DenseMatrix.eye[Double](n)
eye(n)
Diagonal matrix
diag(DenseVector(1.0,2.0,3.0))
diag((1,2,3))
Matrix inline creation
DenseMatrix((1.0,2.0), (3.0,4.0))
array([ [1,2], [3,4] ])
Column vector inline creation
DenseVector(1,2,3,4)
array([1,2,3,4])
Row vector inline creation
DenseVector(1,2,3,4).t
array([1,2,3]).reshape(-1,1)
Vector from function
DenseVector.tabulate(3){i => 2*i}
Matrix from function
DenseMatrix.tabulate(3, 2){case (i, j) => i+j}
Vector creation from array
new DenseVector(Array(1, 2, 3, 4))
Matrix creation from array
new DenseMatrix(2, 3, Array(11, 12, 13, 21, 22, 23))
Vector of random elements from 0 to 1
DenseVector.rand(4)
Matrix of random elements from 0 to 1
DenseMatrix.rand(2, 3)
numpy私は実際に使ったことがなくて、図の中から比較して、実は両者の作成はすべてとても便利で、実はimport breeze.linalg.DenseVector._ DenseVectorは省略できます.(ただし他の方法と衝突しないように注意してください)
簡単な使用例
import breeze.linalg._
import breeze.stats.distributions.{Binomial, Poisson}
val x = DenseVector.zeros[Double](5) // 5 0
x(0)
x(1) = 2 // 2
x(1)
x(3 to 4) := 0.5 // 0.5
x
x(1)
val m = DenseMatrix.zeros[Int](5,5) // 5*5 0
(m.rows, m.cols)
val p = Poisson(3.0) // λ 3.0
p.sample(10) // 10
val b = Binomial(10, 0.5) // n 10, 0.5
b.sample(3) //
使いやすいです.
マトリックスベクトルのいくつかの基本演算
ここで同じように比較してみましょう
Operation
Breeze
Matlab
Numpy
Elementwise addition
a + b
a + b
a + b
Elementwise multiplication
a :* b
a .* b
a * b
Elementwise comparison
a :< b
a < b
(gives matrix of 1/0 instead of true/false) a < b
Inplace addition
a :+= 1.0
a += 1
a += 1
Inplace elementwise multiplication
a :*= 2.0
a *= 2
a *= 2
Vector dot product
a dot b
, a.t * b
† dot(a,b)
dot(a,b)
Elementwise sum
sum(a)
sum(sum(a))
a.sum()
Elementwise max
a.max
max(a)
a.max()
Elementwise argmax
argmax(a)
argmax(a)
a.argmax()
Ceiling
ceil(a)
ceil(a)
ceil(a)
Floor
floor(a)
floor(a)
floor(a)
実はここに皆さんが望んでいる演算がなければ、あるいは皆さんがこれらに詳しくなければ、breezeのマトリクスやベクトルもmap、reduceなどの操作を提供しています.
いくつかの例:
import breeze.linalg._
val a = DenseVector(1,2,4,5,6)
val b = DenseVector(4,5,6,7,8)
val c = a + b
val res = a dot b
val m = max(c)
val d = c *:* 2
val su = sum(a)
上記の結果
iimport breeze.linalg._
a: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 4, 5, 6)
b: breeze.linalg.DenseVector[Int] = DenseVector(4, 5, 6, 7, 8)
c: breeze.linalg.DenseVector[Int] = DenseVector(5, 7, 10, 12, 14)
res: Int = 121
m: Int = 14
d: breeze.linalg.DenseVector[Int] = DenseVector(10, 14, 20, 24, 28)
su: Int = 18
res0: Int = 4
Broadcasting
マトリクスの各行または列を単位として演算したい場合があります.たとえば、次の例です.
import breeze.stats.mean
val x = DenseMatrix((1,2,3),(4,5,6))
x(::, *) + DenseVector(1,2)
mean(x(*, ::))
結果
import breeze.stats.mean
x: breeze.linalg.DenseMatrix[Double] = 1.0 2.0 3.0
4.0 5.0 6.0
res1: breeze.linalg.DenseMatrix[Double] = 2.0 3.0 4.0
6.0 7.0 8.0
res2: breeze.linalg.DenseVector[Double] = DenseVector(2.0, 5.0)
かくりつぶんぷ
breezeにはポアソン分布,正規分布など多くの確率分布が内蔵されている.
import breeze.stats.distributions._
import breeze.stats._
val p = Poisson(3.0)
val samp = p.sample(10)
val posi = samp.map(p.probabilityOf)
val doublePoi = for(x
結果
import breeze.stats.distributions._
import breeze.stats._
p: breeze.stats.distributions.Poisson = Poisson(3.0)
samp: IndexedSeq[Int] = Vector(1, 2, 3, 3, 0, 2, 4, 4, 2, 4)
posi: IndexedSeq[Double] = Vector(0.14936120510359185, 0.22404180765538775, 0.22404180765538775, 0.22404180765538775, 0.049787068367863944, 0.22404180765538775, 0.16803135574154085, 0.16803135574154085, 0.22404180765538775, 0.16803135574154085)
doublePoi: breeze.stats.distributions.Rand[Double] = MappedRand(Poisson(3.0),lew.bing.nlp.A$A28$A$A28$$Lambda$1368/249549676@28b8a031)
res0: breeze.stats.MeanAndVariance = MeanAndVariance(3.0000000000000018,3.141141141141139,1000)
res1: Double = 3.0
res2: Double = 3.0
締めくくり
breezeはまだ多くの机能があって、私のいくつかの高等数学の知识はすべて先生に返して、これらの机能に対してあまり深く研究していないで、时间に限られて、ケースを书きたくなくて、みんなは公式のドキュメントを见て、ドキュメントの书くのはとても简洁で、入门はとても简単で、兴味のあるのは见てみることができます.