示例#1
0
        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);
        }
示例#2
0
            /// <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);
            }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }