Esempio n. 1
0
    def train(self, trainSet: InstanceList, parameters: Parameter):
        """
        Training algorithm for the linear discriminant analysis classifier (Introduction to Machine Learning, Alpaydin,
        2015).

        PARAMETERS
        ----------
        trainSet : InstanceList
            Training data given to the algorithm.
        parameters : Parameter
            Parameter of the Lda algorithm.
        """
        w0 = {}
        w = {}
        priorDistribution = trainSet.classDistribution()
        classLists = Partition(trainSet)
        covariance = Matrix(trainSet.get(0).continuousAttributeSize(), trainSet.get(0).continuousAttributeSize())
        for i in range(classLists.size()):
            averageVector = Vector(classLists.get(i).continuousAverage())
            classCovariance = classLists.get(i).covariance(averageVector)
            classCovariance.multiplyWithConstant(classLists.get(i).size() - 1)
            covariance.add(classCovariance)
        covariance.divideByConstant(trainSet.size() - classLists.size())
        covariance.inverse()
        for i in range(classLists.size()):
            Ci = classLists.get(i).getClassLabel()
            averageVector = Vector(classLists.get(i).continuousAverage())
            wi = covariance.multiplyWithVectorFromRight(averageVector)
            w[Ci] = wi
            w0i = -0.5 * wi.dotProduct(averageVector) + math.log(priorDistribution.getProbability(Ci))
            w0[Ci] = w0i
        self.model = LdaModel(priorDistribution, w, w0)
Esempio n. 2
0
    def train(self, trainSet: InstanceList, parameters: Parameter):
        """
        Training algorithm for the quadratic discriminant analysis classifier (Introduction to Machine Learning,
        Alpaydin, 2015).

        PARAMETERS
        ----------
        trainSet : InstanceList
            Training data given to the algorithm.
        """
        w0 = {}
        w = {}
        W = {}
        classLists = Partition(trainSet)
        priorDistribution = trainSet.classDistribution()
        for i in range(classLists.size()):
            Ci = classLists.get(i).getClassLabel()
            averageVector = Vector(classLists.get(i).continuousAverage())
            classCovariance = classLists.get(i).covariance(averageVector)
            determinant = classCovariance.determinant()
            classCovariance.inverse()
            Wi = deepcopy(classCovariance)
            Wi.multiplyWithConstant(-0.5)
            W[Ci] = Wi
            wi = classCovariance.multiplyWithVectorFromLeft(averageVector)
            w[Ci] = wi
            w0i = -0.5 * (wi.dotProduct(averageVector) + math.log(determinant)) + math.log(priorDistribution.
                                                                                           getProbability(Ci))
            w0[Ci] = w0i
        self.model = QdaModel(priorDistribution, W, w, w0)
Esempio n. 3
0
 def train(self, trainSet: InstanceList, parameters: KMeansParameter):
     priorDistribution = trainSet.classDistribution()
     classMeans = InstanceList()
     classLists = Partition(trainSet)
     for i in range(classLists.size()):
         classMeans.add(classLists.get(i).average())
     self.model = KMeansModel(priorDistribution, classMeans,
                              parameters.getDistanceMetric())