模式识别作业:Fisher, 感知机,MSE线性分类器实现

总结一下4月的模式识别作业

1.Fisher线性判别器

import numpy as np


class Fisher:
    def __init__(self):
        self.W = None
        self.b = None
        self.W_b_gather = {}


    def train(self, X,  iter=0):
        Sw = np.zeros((X[0].shape[0], X[0].shape[0]), dtype=float)
        m =[]
        for i in range(2):
            m.append(np.mean(X[i], axis=1, keepdims=1))
            X[i] = X[i] - m[i]
            Sw += np.dot(X[i], X[i].T)
        self.W = np.linalg.inv(Sw).dot(m[0] - m[1])
        self.b = -1/2 * (self.W.T.dot(m[0]) + self.W.T.dot(m[1]))[0]

        self.W_b_gather[str(iter)] = [self.W.copy().T, self.b.copy()]


    def plot(self, x1, x2):
        m1 = []
        m2 = []
        m1.append(x1)
        m2.append(-(self.b + self.W[0] * m1[0]) / self.W[1])
        m1.append(x2)
        m2.append(-(self.b + self.W[0] * m1[1]) / self.W[1])
        return m1, m2

    def predict(self, X, iter=0):
        W = self.W_b_gather[str(iter)][0]
        b = self.W_b_gather[str(iter)][1]
        y_pred = np.dot(W, X) + b
        y_pred[y_pred > 0] = 1
        y_pred[y_pred < 0] = -1
        return y_pred.T

    def predict_m(self, X, class_num):
        W = []
        b = []
        for i in range(class_num):
            W.append(self.W_b_gather[str(i)][0][0])
            b.append(self.W_b_gather[str(i)][1])
        W = np.array(W)
        b = np.array(b).reshape(-1, 1)
        scored = np.dot(W, X) + b

        y_pred = np.argmax(scored, axis=0) + 1
        return y_pred.reshape(-1, 1)



    def redimension(self, X):
        return self.W.dot(X)

2.感知机

import numpy as np

import random
import os

class Preceptron:
    #感知机一般处理二分类问题,通过点到分类超平面的距离,判断类别
    # 点到直线距离
    def __init__(self):
        self.W = None
        self.b = None

    #训练
    def train(self, X, y, learning_rate=1e-3, num_iters=1000, verbose=Tru
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寰宇的行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值