1. 功能: 这里主要提供Loss函数

2. Loss函数类型
"Andrews" : if |x| < a * pi, y = -a^2 * (1 + cos(x/a)); if |x| > a * pi, y = 0
"Bisquare": if |x| < a, y = a^2 / 6 * (1 - (1 - x^2/a^2)^3); if |x| <= a, y = 0
"Cauchy" : a^2 / 2 * log(1 + x^2 / a^2)
"Cos1": 1 - y0.dot(y1) /(|y0| * |y1|)
"Cos2": 1 - (y0.dot(y1))^2 / (y0^2 * y1^2)
"Cross1": -(y1 * log(y0) + (1 - y1) * log(1 - y0))
"Cross2": -y1 * log(y0)
"L1": |x|
"Fair" : a^2 * (|x|/a - log(1 + |x|/a))
"Class"
"GemanMcClure": x^2 / (2 * (x^2 + a^2))
"Hinge"
"Huber": if |x| < a, y = x^2; if |x| >= a, y = 2 * a * (x - a / 2)
"L2": x^2
"La": |x|^a/a
"Logistic": a^2 * log(cosh(x/a))
"PseudoHuber": a^2 * (sqrt(1 + x^2 / a^2) - 1)
"Talwar": if |x| < a, y = x^2; if |x| >= a, y = a^2
"Welsch": a^2 * (1 - exp(-x^2/a^2))

a :对应函数参数
y0:原始输出
y1:预测输出
x = y1 - y0

3. ClassLossFun使用
/******************************
'1.初始化
Dim loss As New ClassLossFun("Bisquare")

'2.初始化成功下面flag=False
Dim flag As Boolean = loss.IsNothing()

'3.设置参数a
loss.SetParam(10.0)

'4.如果样本只有一个值,则如下方式计算误差
Dim y0 As Double = 1
Dim y1 As Double = 1.1
Dim er As Double = loss.CalcLoss(y0, y1)

'5.如果样本有多个值,则如下方式计算误差
Dim vecY0() As Double = {1, 2, 3}
Dim vecY1() As Double = {1.1, -2, 3.4}
Dim vEr As Double = loss.CalcLoss(vecY0, vecY1)

'6. CalcLoss还支持如下格式
Public Function CalcLoss(ByRef y0() As Double, ByRef y1(,) As Double, ByVal rowIndex As Integer) As Double
Public Function CalcLoss(ByRef y0(,) As Double, ByRef y1(,) As Double, ByVal rowIndex As Integer) As Double

/****************************