2017-02-18 6 views
1

/!\ F#ブランドの初心者/!\関数のパラメータを渡さずに動作

は、私は私に

val input : (int * float) [] = [|(1, 1.0); (2, 2.0); (3, 2.25); (4, 4.75); (5, 5.0)|] 
val x : float [] = [|1.0; 2.0; 3.0; 4.0; 5.0|] 
val y : float [] = [|1.0; 2.0; 2.25; 4.75; 5.0|] 
val regression : SimpleLinearRegression = y(x) = 1,075x + -0,224999999999998 
val sse : float = 1.06875 
val intercept : float = -0.225 
val slope : float = 1.075 
val mse : float = 0.21375 
val rmse : float = 0.4623310502 
val r2 : float = 0.9153465347 

がどのようにということである結果をもたらす、このコード

#r @"..\packages\Accord.3.4.0\lib\net40\Accord.dll" 
#r @"..\packages\Accord.Statistics.3.4.0\lib\net40\Accord.Statistics.dll" 
#r @"..\packages\Accord.Math.3.4.0\lib\net40\Accord.Math.dll" 

open Accord 
open Accord.Statistics.Models.Regression.Linear 

let input = [|1,1.;2,2.;3,2.25;4,4.75;5,5.|] 

let x = input |> Array.map(fun (x,y) -> float x) 
let y = input |> Array.map(fun (x,y) -> y) 
let regression = SimpleLinearRegression() 

let sse = regression.Regress(x,y) 
let intercept = regression.Intercept 
let slope = regression.Slope 
let mse = sse/float x.Length 
let rmse = sqrt mse 
let r2 = regression.CoefficientOfDetermination(x,y) 

を持っています可能であればSimpleLinearRegression機能は動作しますが、それでもxyを渡すことはありませんか?

このF#マジックの背後にあるものを理解するための参照先を教えてください。

+3

'SimpleLinearRegression'は関数ではなく、クラスコンストラクタです。まず、そのクラスのオブジェクトを構築し、 '回帰'という名前を付けて、 'Regress'を' regression.Regress(x、y) 'と呼んでください。 –

答えて

2

あなたはF-Sharp Interactiveを使用しており、すべてのコードをFSIに一挙に送信していると推測しています。

魔法は、コードが最初に実行され、結果が書き込まれることです。たとえ 'val'出力のシーケンスがそのように直感的なビットカウンタを得るとしても。

Iは、(将来の読者のために)この例で示すことができる:

val mutable a : int = 3 
val f : (unit -> int) 
val it : unit =() 

aが印刷される前にその最終値に更新する方法を通知(:FSIにこの出力を与える

let mutable a = 1 
let f = a <- 2; fun() -> 3 
do a <- f() 

たとえ1行目と2行目以降のaの値であっても、1と2は表示されません)。

関連する問題