/// <summary> /// Конструктор класса /// </summary> /// <param name="dataset">Выборка</param> /// <param name="minR">Минимальный радиус</param> public Forel(Vector[] dataset, int minR) { Vector _old = new Vector(), _new = new Vector(); // Центры гиперсфер _datasetNotClasteris = _dataset = dataset; // Загрузка выборки _old = _mainCentr = GetCentr(_dataset); // Получение центра Rn = R0 = Max(_dataset, _mainCentr); // Начальный радиус гиперсферы // Кластеризация while (_datasetNotClasteris.Length != 0) { Rn = 0.9 * R0; // Уменьшение радиуса гиперсферы _nowDataset = GetGipersfer(Rn, _datasetNotClasteris[0], _datasetNotClasteris); // обводка гиперсферой _new = GetCentr(_nowDataset); // новый центр //Центр кластера while ((_old != _new) && (Rn >= minR)) { Rn *= 0.9; //Уменьшение радиуса гиперсферы _old = _new; // сохранение старого радиуса _nowDataset = GetGipersfer(Rn, _old, _datasetNotClasteris); // обводка гиперсферой _new = GetCentr(_nowDataset); // новый центр } _claster = new Claster { Centr = _new, // Добавление центра Dataset = _nowDataset // выборка }; // Новый кластер _clasters.Add(_claster); // Добавление кластера в коллекцию _datasetNotClasteris = AWithOutB(_datasetNotClasteris, _nowDataset); // Удаление кластеризированных данных } }
public Claster GetStruct() { Claster claster = new Claster(); claster.Volume_sum = this.Volume_sum; claster.Volume_Ask_sum = this.Volume_Ask_sum; claster.Volume_Bid_sum = this.Volume_Bid_sum; return(claster); }
public override double LansaWilliamsDistance(Claster Sl, Claster Sh, Claster Sm) { int Nl = Sl.Points.Count; int Nh = Sh.Points.Count; double den = Nl + Nh; SetLansaWiliamsParams(Nl / den, Nh / den, 0, 0); return(base.LansaWilliamsDistance(Sl, Sh, Sm)); }
public double TotalIntroClusterDispersion(Claster[] clasters, Func <double[], double[], double> d) { int k = clasters.Length; int n = clasters[0].Center.Length; Matrix sumMatrix = Matrix.Create.New(n); for (int i = 0; i < k; i++) { Claster current = clasters[i]; sumMatrix += current.Nj * current.GetMatrixOfCovariations(); } return(sumMatrix.Determinant()); }
public override double LansaWilliamsDistance(Claster Sl, Claster Sh, Claster Sm) { int Nl = Sl.Points.Count; int Nh = Sh.Points.Count; int Nm = Sm.Points.Count; double den = Nl + Nh + Nm; double alpha_l = (Nm + Nl) / den; double alpha_h = (Nm + Nh) / den; double beta = -Nm / den; SetLansaWiliamsParams(alpha_l, alpha_h, beta, 0); return(base.LansaWilliamsDistance(Sl, Sh, Sm)); }
public double Distance(Claster Sl, Claster Sh, Claster Sm) => Distance(Sl.Points, Sh.Points, Sm.Points);
public virtual double LansaWilliamsDistance(Claster Sl, Claster Sh, Claster Sm) { return(lansaWilliamsaObject.Distance(Sl, Sh, Sm)); }
public double GetClasterDistance(Claster S1, Claster S2) => GetClasterDistance(S1.Points, S2.Points);
public void work() { Claster claster = new Claster(sem.outStruct); claster.generateLayers(); }