2
サイファーの線形回帰R-二乗係数はどのようにして求めることができますか?Cypherの線形回帰関数
Oracle Databaseで定義されているように私は、サイファーの等価線形回帰関数をしたい:
REGR_R2(column_y, column_x)
サイファーの線形回帰R-二乗係数はどのようにして求めることができますか?Cypherの線形回帰関数
Oracle Databaseで定義されているように私は、サイファーの等価線形回帰関数をしたい:
REGR_R2(column_y, column_x)
あなたがあなた自身のJava procedures in Neo4jを書いて、サイファーからそれらを呼び出すことができます。
回帰関数については、ApacheのコモンSimpleRegressionクラスを使用できます。
次のコードは、regr
という名前のプロシージャを作成し、与えられたXプロパティとYプロパティの基本回帰値を返します。ところでregr('MY_LABEL', 'Y', 'X')
public class Regression {
@Context public GraphDatabaseService db;
// Result class
public static class Output {
public double r2;
public double avg_x;
public double avg_y;
public double slope;
public Output(double r2, double avg_x, double avg_y, double slope){
this.r2 = r2;
this.avg_x = avg_x;
this.avg_y = avg_y;
this.slope = slope;
}
}
@Procedure("regr")
public Stream<Output> regr(@Name("label") String label,
@Name("property_y") String y, @Name("property_x") String x) {
SimpleRegression regr = new SimpleRegression(false);
double regr_avgx = 0;
double regr_avgy = 0;
int count = 0;
try (ResourceIterator it = db.findNodes(Label.label(label))) {
while (it.hasNext()) {
Node node = (Node)it.next();
if(node.hasProperty(x) && node.hasProperty(y))
{
Object prop_x = node.getProperty(x);
Object prop_y = node.getProperty(y);
regr_avgx += (double) ((Long)prop_x);
regr_avgy += (double) ((Long)prop_y);
regr.addData((double) ((Long)prop_x), (double) ((Long)prop_y));
count++;
}
}
}
regr_avgx /= count;
regr_avgy /= count;
return Stream.of(new Output(regr.getRSquare(), regr_avgx, regr_avgy, regr.getSlope()));
}
}
:
あなたはとサイファーからこのプロシージャを呼び出すことができます。あなたはボン、ドイツの両方にいるようです:) –