2017-02-18 1 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'은 함수가 아니라 클래스 생성자입니다. 먼저 그 클래스의 객체를 만들고 이름에'regression'을 부여한 다음'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를 보지 못합니다, 비록 그것들은 각각 라인 1과 2 이후에 a의 값입니다).

관련 문제