问题描述
我想将此交易视图函数转换为 C#,但我对逻辑和数据类型感到困惑。这是一种机器学习算法。我不是数学或编码专业,所以请帮助我。我需要代码末尾的损失和预测数据。 for循环内部的损失方程出现问题。
//user defined functions
lookback = 2
nlbk = 2
lrate = 0.0009
iterations = 1000
dot(v,w,p) => sum(v * w,p) // dot product
sigmoid(z) => 1.0 / (1.0 + exp(-z))
logistic_regression(X,Y,p,lr,iterations) =>
w = 0.0,loss = 0.0
for i=1 to iterations
hypothesis = sigmoid(dot(X,0.0,p)) //-- prediction
loss := -1.0 / p * (dot(dot(Y,log(hypothesis) + (1.0 - Y),p),log(1.0 - hypothesis),p))
gradient = 1.0 / p * (dot(X,hypothesis - Y,p))
w := w - lr * gradient //-- update weights
[loss,sigmoid(dot(X,p))] //-- returns current loss & prediction
//-------Using logistic regression function in algorithm
base= close //close values of stock data except last (unclosed) bar
synth= log(abs(pow(close,2) - 1) + .5)
[loss,prediction] = logistic_regression(base,synth,lookback,lrate,iterations)
///--------CSHARP CODE needs to be corrected
public static object logistic_regression(double[] X,double[] Y,int p,double lr,int iterations)
{
var w = 0.0;
var loss = 0.0;
//double[] dotw = new double[X.Length];
for (int i = 0; i < Enumerable.Range(0,iterations).ToList().Count(); i++)
{
//foreach (var i in Enumerable.Range(0,iterations))
{
//var hypothesis = sigmoid(dot(X,dotw,p));
double hypothesis = sigmoid(0);
loss = -1.0 / p * dot(dot(Y,Math.Log(0.5) + (1.0 - Y),Math.Log(1.0 - 0.5),p);
var gradient = 1.0 / p * dot(X,p);
w = w - lr * gradient;
}
new List<object> {
loss,p))
};
}
public static double summ(double[] X,int Y)
{
double total = 0;
foreach (var i in Enumerable.Range(0,Y))
{
total = total + X[i];
}
return total;
}
public static double dot(double[] v,double [] w,int p)
{
double total = 0;
List<double> sayilar = new List<double>();
for (int i = 0; i < v.Length; i++)
{
sayilar.Add(v[i] * w[i]);
}
total = summ(sayilar.ToArray(),p);
return total;
}
public static double sigmoid(double z)
{
return 1.0 / (1.0 + Math.Exp(-z));
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)