private Dictionary <int, double> GetDistance(IDistance distance) { // userId with simularity Dictionary <int, double> userDis = new Dictionary <int, double>(); // Getting other user with the same items rated foreach (KeyValuePair <int, Dictionary <int, double> > item in _dict) { int curUser = item.Key; List <double> p = new List <double>(); List <double> q = new List <double>(); foreach (KeyValuePair <int, double> curArticle in item.Value) { if (curUserItems.ContainsKey(curArticle.Key)) { p.Add(curUserItems[curArticle.Key]); q.Add(curArticle.Value); } } // calculate the simularity double dis = distance.Calculate(p.ToArray(), q.ToArray()); userDis.Add(item.Key, dis); } Console.WriteLine($"Interface = {distance.GetType()} Distance of items:"); Ranking(userDis); return(userDis); }
/// <summary> /// Squared sum of errors of the points and their current mean. Uses the Euclidean distance. /// </summary> public float SSE() { byte[] mean = GetCurrentMeanPoint(); // TODO: could be Centroid instead if we would make sure that the Centroid is the current mean float res = 0.0F; foreach (uint ind in PointIndices) { res += _distance.Calculate(mean, _points[ind]); } return(res); }
private void Affinity(List <Antibody> antibodies) { var antigenSize = _distance.SequenceSize(); for (int i = 0; i < antibodies.Count(); i++) { var sequence = antibodies[i].Sequence; var length = sequence.Length; var index = Constants.Random.Next(0, antigenSize - length); antibodies[i].Affinity = _distance.Calculate(sequence, index, length); } }
protected Centroid ClosestCentroidTo(uint pointInd) { System.Diagnostics.Debug.Assert(ClusterNum > 0); Centroid res = new Centroid(PointDim); float minDist = float.MaxValue; foreach (Cluster cluster in _clusters.Values) { Centroid centroid = cluster.Centroid; float dist = _distance.Calculate(centroid.Values, _points[pointInd]); if (dist < minDist) { minDist = dist; res = centroid; } } return(res); }