コード例 #1
0
    //**************************************************************************************

    public static WekaLinearRegression CreateNew(int iParamtersID, List <ClassifierParameter> iParameters, Candlestick.Period iPeriod, int iProfitTime, List <int> iTrainingPoints, bool iEliminateColinearAttributes, bool iMinimal)
    {
        // Create WekaInfo and retrive ID
        var info = new WekaInfo(null, typeof(WekaJ48), iParamtersID, iPeriod, iProfitTime);

        WekaInfo.InsertToDB(info);

        if (info.ID is null)
        {
            throw new Exception("Could not deduct ID");
        }

        // Create LinearRegressionInfo
        var lrInfo = new WekaLinearRegressionInfo((int)info.ID, iEliminateColinearAttributes, iMinimal);

        WekaLinearRegressionInfo.UpdateDB(lrInfo);

        // Save training points
        if (iTrainingPoints != null)
        {
            SaveTrainingPoints(iTrainingPoints, "Data/TrainingPoints/Classifier_" + info.ID.ToString() + ".dat");
        }

        // Create classifier
        return(new WekaLinearRegression(info, iParameters, lrInfo));
    }
コード例 #2
0
    //**************************************************************************************

    /// <summary>
    /// Inserts prediction profits info to DB
    /// </summary>
    public static void UpdateDB(WekaLinearRegressionInfo iInfo)
    {
        var sql = "IF EXISTS(SELECT * FROM LinearRegressionInfo WHERE Id = @ID) " +
                  "Update LinearRegressionInfo SET " +
                  "CoefOfDetermination = @CoefOfDetermination, ProfitStdDev = @ProfitStdDev " +
                  " Where ID = @ID " +
                  "ELSE" +
                  " INSERT INTO LinearRegressionInfo (Id, EliminateColinearAttributes, Minimal, CoefOfDetermination, ProfitStdDev) VALUES(@ID, @EliminateColinearAttributes, @Minimal, @CoefOfDetermination, @ProfitStdDev)";


        using (var connection = new SqlConnection(Program.SQLConnectionName))
        {
            connection.Open();
            {
                var cmd = new SqlCommand(sql, connection);
                cmd.Parameters.AddWithValue("@Id", iInfo.ID);
                cmd.Parameters.AddWithValue("@EliminateColinearAttributes", iInfo.EliminateColinearAttributes);
                cmd.Parameters.AddWithValue("@Minimal", iInfo.Minimal);

                cmd.Parameters.AddWithValue("@CoefOfDetermination", (object)iInfo.CoefOfDetermination ?? DBNull.Value);
                cmd.Parameters.AddWithValue("@ProfitStdDev", (object)iInfo.ProfitStdDev ?? DBNull.Value);

                var dataAdapter = new SqlDataAdapter
                {
                    InsertCommand = cmd
                };
                dataAdapter.InsertCommand.ExecuteNonQuery();
                dataAdapter.InsertCommand.Dispose();
            }
        }
    }
コード例 #3
0
    //**************************************************************************************

    public override void RebuildClassifier()
    {
        OutputMessage("Rebuilding classifier");

        // Remove model
        DeleteModel(ID);

        // Remove training data
        DeleteTrainingPoints(ID);

        // Update info
        LRInfo.OnClassifierRebuild();
        WekaLinearRegressionInfo.UpdateDB(LRInfo);
    }
コード例 #4
0
    //**************************************************************************************

    /// <summary>
    ///	Build cllasifier model and save it to a file.
    /// </summary>
    public override void Build(CandlestickCollection iCandlestick)
    {
        List <int> trainingPoints = null;

        // Build model
        if (!File.Exists(ModelFilename))
        {
            OutputMessage("Building model");
            trainingPoints = LoadTrainingPoints(iCandlestick, ID, ProfitTime);

            Model = new weka.classifiers.functions.LinearRegression();
            Model.setEliminateColinearAttributes(LRInfo.EliminateColinearAttributes);
            Model.setMinimal(LRInfo.Minimal);
            Model.buildClassifier(CreateInstances(iCandlestick, trainingPoints, Attributes, Parameters, Period, ProfitTime));
            weka.core.SerializationHelper.write(ModelFilename, Model);
            coefficients = Model.coefficients();
        }

        // Calculate coeficient of determination and profits std dev
        if (LRInfo.CoefOfDetermination == null || LRInfo.ProfitStdDev == null)
        {
            WaitTillModelReady();
            OutputMessage("Calculating coeficient of determination and profits std dev");

            if (trainingPoints is null)
            {
                trainingPoints = LoadTrainingPoints(iCandlestick, ID, ProfitTime);
            }

            var par           = CalculateParameters(Parameters, iCandlestick, trainingPoints, Period);
            var futureProfits = FullToTraining(new List <float>(CalculateFutureProfits(iCandlestick[kTrainingPeriod], ProfitTime)), trainingPoints).ToArray();
            var pred          = new List <float>();

            for (int j = 0; j < par.Count; j++)
            {
                var fp = PredictDFP(par[j]);

                var targetPriceChange = (float)Math.Exp(fp);
                pred.Add(targetPriceChange - 1.0f);
            }

            LRInfo.CoefOfDetermination = (float)Math.Pow(Statistics.CalculateCorrelation(futureProfits, pred.ToArray()), 2.0f);
            LRInfo.ProfitStdDev        = Statistics.StandardDeviation(futureProfits, pred.ToArray());
            WekaLinearRegressionInfo.UpdateDB(LRInfo);
        }
    }
コード例 #5
0
    //**************************************************************************************

    public override void RemoveClassifier()
    {
        if (!Exist(ID))
        {
            return;
        }

        Console.WriteLine("Removing classifier: " + ID);

        // Remove model
        DeleteModel(ID);

        // Remove training data
        DeleteTrainingPoints(ID);

        WekaInfo.RemoveFromDB(ID);
        WekaLinearRegressionInfo.RemoveFromDB(ID);

        // Remove target classifier from static list
        classifiers.Remove(ID);
    }
コード例 #6
0
    //**************************************************************************************

    /// <summary>
    /// Loads prediction profits from DB.
    /// </summary>
    public static List <WekaLinearRegressionInfo> LoadFromDB()
    {
        var results = new List <WekaLinearRegressionInfo>();

        var sql = "Select * from LinearRegressionInfo";

        using (var connection = new SqlConnection(Program.SQLConnectionName))
        {
            connection.Open();

            var command = new SqlCommand(sql, connection);
            using (var reader = command.ExecuteReader())
                while (reader.Read())
                {
                    var info = new WekaLinearRegressionInfo(reader.GetInt32(reader.GetOrdinal("Id")), reader.GetBoolean(reader.GetOrdinal("EliminateColinearAttributes")), reader.GetBoolean(reader.GetOrdinal("Minimal")));

                    if (!reader.IsDBNull(reader.GetOrdinal("CoefOfDetermination")))
                    {
                        info.CoefOfDetermination = (float)reader.GetDouble(reader.GetOrdinal("CoefOfDetermination"));
                    }

                    if (!reader.IsDBNull(reader.GetOrdinal("ProfitStdDev")))
                    {
                        info.ProfitStdDev = (float)reader.GetDouble(reader.GetOrdinal("ProfitStdDev"));
                    }

                    if (!reader.IsDBNull(reader.GetOrdinal("ProfitStdDev")))
                    {
                        info.ProfitStdDev = (float)reader.GetDouble(reader.GetOrdinal("ProfitStdDev"));
                    }

                    results.Add(info);
                }
        }

        return(results);
    }
コード例 #7
0
    //**************************************************************************************

    public WekaLinearRegression(WekaInfo iInfo, List <ClassifierParameter> iParameters, WekaLinearRegressionInfo iLRInfo)
        : base(iInfo, iParameters)
    {
        LRInfo = iLRInfo ?? throw new ArgumentNullException("iLRInfo");
    }