模式识别与机器学习(作业3)

简介: 数据集Dataset1.txt328 个同学的身高、体重、性别数据(78 个女生、250 个男生)Dataset2.txt124 个同学的数据(40 女、84 男)Dataset3.txt90 个同学的数据(16 女,74 男)

基于压缩近邻法练的分类问题

压缩近邻法的做法是:

  1. 对初始训练集R,将其划分为两个部分A和B,初始A样本集合为空。
  2. 从R中随机选择一个样本放入A中,其它样本放入B中,用其对B中的每一个样本进行分类。若样本i能够被正确分类,则将其放回到B中;否则将其加入到A中;
  3. 重复上述过程,直到B中所有样本都能正确分类为止。
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 19 22:27:40 2020
@author: lihuanyu
"""
#%%数据预处理
import numpy as np
from gain_xy import gain_xy 
from sklearn.metrics import accuracy_score
import csv
X_train,y_train,X_test1,y_test1,X_test2,y_test2 = gain_xy()
#%%
import numpy as np
from math import sqrt
from collections import Counter
class KNNClassifier:
    #定义K近邻的值必须大于1
    def __init__(self,k):
        self.k = k
        self.x_train_fit = None
        self.y_train_fit = None 
    def fit(self,x_train,y_train):
        self.x_train_fit = x_train
        self.y_train_fit = y_train
        return self
    #算出每个点与其他训练集的距离
    def _predict(self,x):
        distance = []
        for x_train in self.x_train_fit:
            distance.append(sqrt(np.sum((x_train - x) ** 2)))
        nearst = np.argsort(distance)
        topk_y = []
        for j in nearst[:self.k]:
            topk_y.append(self.y_train_fit[j])
        votes = Counter(topk_y)
        result = votes.most_common(1)[0][0]
        return result
    #批量预测
    def predict(self,X_test,y_test):
        y_predict = [self._predict(i) for i in X_test]
        print("准确率为",accuracy_score(np.array(y_predict),y_test))
#%%KNN预测
knn = KNNClassifier(k=5)
knn.fit(X_train,y_train)
knn.predict(X_test1,y_test1)
knn.predict(X_test2,y_test2)
#%%压缩处理
k=1
Store = [X_train[0]] #新样本集
Store_y = [y_train[0]]
Grabbag = [i for i in X_train[1:]]
Grabbag_y = [i for i in y_train[1:]]
for x_t,y_t in zip(Grabbag,Grabbag_y):
    distance = []
    for x,y in zip(Store,Store_y):
        #print(x,y)
        distance.append(sqrt(np.sum((x - x_t) ** 2)))
    nearst = np.argsort(distance)
    topk_y = [Store_y[t] for t in nearst[:k]]
    votes = Counter(topk_y)
    result = votes.most_common(1)[0][0]
    if result == y:
       Store.append(x_t)
       Store_y.append(y_t)
       print(len(Store),len(Store_y))
#%%结果
X_train1 = np.array([i for i in Store])
y_train1 = np.array([i for i in Store_y])
import matplotlib.pyplot as plt
plt.scatter(X_train1[y_train1==0,0],X_train1[y_train1==0,1],color='red')
plt.scatter(X_train1[y_train1==1,0],X_train1[y_train1==1,1],color='blue')
knn = KNNClassifier(k=5)
knn.fit(X_train1,y_train1)
knn.predict(X_test1,y_test1)
knn.predict(X_test2,y_test2)    

结果

test1K近邻准确率为 0.9032258064516129
test2K近邻准确率为 0.8444444444444444
test1压缩近邻准确率为 0.8548387096774194
test压缩近邻准确率为 0.8

压缩之后样本点分布如下图所示:

相关文章
|
9天前
|
机器学习/深度学习 算法 数据挖掘
机器学习第五次作业
机器学习第五次作业包含三个题目。第一题实现高斯贝叶斯分类和高斯朴素贝叶斯分类,分别用于判断瓜的好坏。第二题使用EM算法对数据进行聚类,输出两个类别的均值、方差和先验概率。第三题内容未完整展示。
32 0
机器学习第五次作业
|
9天前
|
机器学习/深度学习 计算机视觉 Python
坐标下降求解人脸表示(机器学习作业04)
这是机器学习第四次作业的解答,包含两道题目。第一题涉及数学推导,给出了详细的求解过程。第二题则通过 Python 代码实现图像处理,包括读取单张图片和批量读取文件夹中的图片,并将图像数据转换为矩阵形式。
11 0
坐标下降求解人脸表示(机器学习作业04)
|
9天前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
13 0
|
机器学习/深度学习 算法 数据可视化
模式识别与机器学习--决策树实战
模式识别与机器学习--决策树实战
210 0
模式识别与机器学习--决策树实战
|
机器学习/深度学习 人工智能 并行计算
机器学习/人工智能 大作业:手写数字识别系统
机器学习/人工智能 大作业:手写数字识别系统
929 0
机器学习/人工智能 大作业:手写数字识别系统
|
机器学习/深度学习 存储 关系型数据库
【吴恩达课后编程作业】第三周作业 (附答案、代码)隐藏层神经网络 神经网络、深度学习、机器学习
【吴恩达课后编程作业】第三周作业 (附答案、代码)隐藏层神经网络 神经网络、深度学习、机器学习
433 0
【吴恩达课后编程作业】第三周作业 (附答案、代码)隐藏层神经网络 神经网络、深度学习、机器学习
|
机器学习/深度学习 存储 移动开发
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
376 0
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
|
机器学习/深度学习 数据挖掘 Python
模式识别与机器学习(作业6)基于聚类的图片分割
流程: 读图片(512, 512, 3)–>下采样,降低维度(256, 256, 3)–>将通道展平,data = (65536, 3)–>归一化
96 0
模式识别与机器学习(作业6)基于聚类的图片分割
|
机器学习/深度学习 编解码 计算机视觉
模式识别与机器学习(作业5)基于PCA–LDA的人脸识别
本次的实验是在模式识别与机器学习(作业4),PCA降维的基础上加入了线性判别分析,对维度进行了进一步的降低。
182 0
|
机器学习/深度学习 编解码 计算机视觉
模式识别与机器学习(作业4)
基于PCA降维的人脸识别
153 0