看李政轩老师讲的Kernel,讲的非常好!前面有几道作业题,用MATLAB简单做了下,不知道对不对,错误之处还请指出。

  题目是这样的。

  一、MATLAB版本:

clear;
clc
% 生成training sample
MU1 = [1 2];
MU2 = [4 6];
SIGMA1 = [4 4; 4 9];
SIGMA2 = [4 2; 2 4]; M1 = mvnrnd(MU1,SIGMA1,100);
M2 = mvnrnd(MU2,SIGMA2,100); %生成testing sample
TEST1 = mvnrnd(MU1,SIGMA1,50);
TEST2 = mvnrnd(MU2,SIGMA2,50); %向量化的计算
%中间点C
C = (MU1+MU2)/2;
C_M = repmat(C,50,1); %MUi vector
TRAIN_V = MU1 - MU2;
TRAIN_V_M = repmat(TRAIN_V,50,1); %TEST vector
TEST1_V = TEST1 - C_M;
TEST2_V = TEST2 - C_M; %预测第一个测试集
num1 = 0;
for (i=1:50)
d = dot(TRAIN_V,TEST1_V(i,:));
if d >0
num1 = num1 + 1;
end
end disp(['测试集1输入数据数量为:',num2str(length(TEST1_V)),'正确分类的数量为:',num2str(num1)])
disp(['测试集1的预测准确度为:',num2str(num1/length(TEST1_V))]) num2 = 0;
for (i=1:50)
d = dot(TRAIN_V,TEST2_V(i,:));
if d <0
num2 = num2 + 1;
end
end disp(['测试集2输入数据数量为:',num2str(length(TEST2_V)),'正确分类的数量为:',num2str(num2)])
disp(['测试集2的预测准确度为:',num2str(num2/length(TEST2_V))]) %两样本中心值连线的斜率
K = TRAIN_V(2)/TRAIN_V(1);
%两样本中心值连线的中垂线的斜率
k = K/(-1); x = min(TEST1):0.1:max(TEST2);
y = k*(x-C(1))+C(2); plot(TEST1,TEST2,'O',MU1,MU2,'o',x,y)

  输出如下:

  作图:

  

  二、python3版本

  注意这里原始的training data 做了改动,原理是一样的。

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 6 20:02:02 2016 @author: Administrator
""" import numpy as np
from matplotlib import pyplot as plt # train matrix
def get_train_data():
M1 = np.random.random((100,2))
M2 = np.random.random((100,2)) - 0.7
plt.plot(M1[:,0],M1[:,1], 'ro')
plt.plot(M2[:,0],M2[:,1], 'go')
return M1,M2 def classify(M1,M2,test_data):
mean1 = np.mean(M1, axis=0)
mean2 = np.mean(M2, axis=0)
mean = (mean1 + mean2)/2
# for plot
km = (mean1[1]-mean2[1])/(mean1[0]-mean2[0])
k = km/(-1)
min_x = np.min(M2)
max_x = np.max(M1)
x = np.linspace(min_x, max_x, 100)
y = k*(x-mean[0])+mean[1]
plt.plot(x,y,'y') vector_train = mean1 - mean
vector_test = test_data - mean
vector_dot = np.dot(vector_train, vector_test)
sgn = np.sign(vector_dot) return sgn def get_test_data():
M = np.random.random((50,2))
plt.plot(M[:,0],M[:,1],'*y')
return M if __name__=="__main__":
M1,M2 = get_train_data()
test_data = get_test_data()
right_count = 0
for test_i in test_data:
classx = classify(M1,M2,test_i)
if classx == 1:
right_count += 1
plt.show()
print("The accuracy of right classification is %s"%str(right_count/len(test_data)))

  输出:

简单的线性分类——MATLAB,python3实现的更多相关文章

  1. 【ML系列】简单的二元分类——Logistic回归

    对于了解机器学习中二元分类问题的来源与分析,我认为王树义老师这篇文章讲的非常好,通俗且易懂: http://blog.sciencenet.cn/blog-377709-1121098.html 但王 ...

  2. 【cs231n】图像分类-Linear Classification线性分类

    [学习自CS231n课程] 转载请注明出处:http://www.cnblogs.com/GraceSkyer/p/8824876.html 之前介绍了图像分类问题.图像分类的任务,就是从已有的固定分 ...

  3. 【cs231n】线性分类笔记

    前言 首先声明,以下内容绝大部分转自知乎智能单元,他们将官方学习笔记进行了很专业的翻译,在此我会直接copy他们翻译的笔记,有些地方会用红字写自己的笔记,本文只是作为自己的学习笔记.本文内容官网链接: ...

  4. CS231n课程笔记翻译3:线性分类笔记

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Linear Classification Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,巩子嘉和堃堃进行校 ...

  5. 从损失函数优化角度:讨论“线性回归(linear regression)”与”线性分类(linear classification)“的联系与区别

    1. 主要观点 线性模型是线性回归和线性分类的基础 线性回归和线性分类模型的差异主要在于损失函数形式上,我们可以将其看做是线性模型在多维空间中“不同方向”和“不同位置”的两种表现形式 损失函数是一种优 ...

  6. c语言描述简单的线性表,获取元素,删除元素,

    //定义线性表 #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; //这是数组的长度, ...

  7. python实现感知机线性分类模型

    前言 感知器是分类的线性分类模型,其中输入为实例的特征向量,输出为实例的类别,取+1或-1的值作为正类或负类.感知器对应于输入空间中对输入特征进行分类的超平面,属于判别模型. 通过梯度下降使误分类的损 ...

  8. 吴裕雄 python 机器学习——支持向量机线性分类LinearSVC模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm fr ...

  9. 利用sklearn对MNIST手写数据集开始一个简单的二分类判别器项目(在这个过程中学习关于模型性能的评价指标,如accuracy,precision,recall,混淆矩阵)

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

随机推荐

  1. Linux常见命令汇总

    1.rz sz上传下载 若未安装使用:yum install lrzsz 安装 上传: rz 覆盖上传: rz -y 下载: sz bbb.jpg

  2. JAVA基础知识之JDBC——编程步骤及执行SQL

    JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...

  3. Uva 11542 乘积是平方数

    题目链接:http://vjudge.net/contest/142484#problem/A 这个题目也是2016年CCPC网赛上面的题目,当时我是不会做的,但是大牛们都知道这是一个原题,最后给一队 ...

  4. laravel框架总结(四) -- 服务容器

    1.依赖 我们定义两个类:class Supperman 和 class Power,现在我们要使用Supperman ,而Supperman 依赖了Power class Supperman { p ...

  5. webform简单控件

    表单元素: 文本类: text password textarea hidden text,password,textarea实现控件:textbox   textmode属性选择password或m ...

  6. Android显示基础--单位与尺寸

    px:是像素的意思,屏幕可以显示的最小元素单位,单独一个像素点非常小,肉眼都无法看到. pt:是磅数的意思,1磅等于七十二分之一英寸,pt一般用作字体的单位. dp:密度无关像素的意思,也被称为dip ...

  7. oracle的存储过程和函数(PL/SQL)

    czmmiao 存储过程概述 存储过程是子程序的一种类型,能够完成一些任务,作为schema对象存储于数据库.是一个有名字的PL/SQL代码块,支持接收或不接受参数,同时也支持参数输出.一个存储过程通 ...

  8. Security » Authorization » 简单授权

    Simple Authorization¶ 简单授权 82 of 86 people found this helpful Authorization in MVC is controlled thr ...

  9. Objective-C( block的使用)

    block block用来保存一段代码 block的标志:^ block跟函数很像:可以保存代码.有返回值.有形参.调用方式跟调用方法一样 block内部可以访问外面的变量 默认情况下,block内部 ...

  10. Project2010简易操作指南[转]

    Microsoft Office Project 2010 操作手册 英文界面版 一.启动阶段 1. 前期准备 (1)新建项目文件 选择 File — NewNew 菜单, 选择项目模版 打开项目文件 ...