简单的线性分类——MATLAB,python3实现
看李政轩老师讲的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实现的更多相关文章
- 【ML系列】简单的二元分类——Logistic回归
对于了解机器学习中二元分类问题的来源与分析,我认为王树义老师这篇文章讲的非常好,通俗且易懂: http://blog.sciencenet.cn/blog-377709-1121098.html 但王 ...
- 【cs231n】图像分类-Linear Classification线性分类
[学习自CS231n课程] 转载请注明出处:http://www.cnblogs.com/GraceSkyer/p/8824876.html 之前介绍了图像分类问题.图像分类的任务,就是从已有的固定分 ...
- 【cs231n】线性分类笔记
前言 首先声明,以下内容绝大部分转自知乎智能单元,他们将官方学习笔记进行了很专业的翻译,在此我会直接copy他们翻译的笔记,有些地方会用红字写自己的笔记,本文只是作为自己的学习笔记.本文内容官网链接: ...
- CS231n课程笔记翻译3:线性分类笔记
译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Linear Classification Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,巩子嘉和堃堃进行校 ...
- 从损失函数优化角度:讨论“线性回归(linear regression)”与”线性分类(linear classification)“的联系与区别
1. 主要观点 线性模型是线性回归和线性分类的基础 线性回归和线性分类模型的差异主要在于损失函数形式上,我们可以将其看做是线性模型在多维空间中“不同方向”和“不同位置”的两种表现形式 损失函数是一种优 ...
- c语言描述简单的线性表,获取元素,删除元素,
//定义线性表 #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; //这是数组的长度, ...
- python实现感知机线性分类模型
前言 感知器是分类的线性分类模型,其中输入为实例的特征向量,输出为实例的类别,取+1或-1的值作为正类或负类.感知器对应于输入空间中对输入特征进行分类的超平面,属于判别模型. 通过梯度下降使误分类的损 ...
- 吴裕雄 python 机器学习——支持向量机线性分类LinearSVC模型
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm fr ...
- 利用sklearn对MNIST手写数据集开始一个简单的二分类判别器项目(在这个过程中学习关于模型性能的评价指标,如accuracy,precision,recall,混淆矩阵)
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
随机推荐
- 关于ifram之间的相互调用
window.iframeId.btnClose.click(); 父调子 window.parent.FatherFunciton(); 子调父
- (6) 深入理解Java Class文件格式(五)
前情回顾 本专栏的前几篇博文, 对class文件中的常量池进行了详细的解释. 前文讲解了常量池中的7种数据项, 它们分别是: CONSTANT_Utf8_info CONSTANT_NameAndTy ...
- 华东交通大学2016年ACM“双基”程序设计竞赛 1008
Problem Description halfyarn找你写个简单的题?好哒!给你n个整数,现在要求你选择两个位置的数,例如选择第pos_a个数a,和第pos_b个数b,给定ans=min(a,b) ...
- Cheatsheet: 2015 05.01 ~ 05.31
.NET .NET on Mac for the OS X n00b without Mono via Visual Studio Code Microsoft frameworks deprecat ...
- poj2778DNA Sequence(AC自动机+矩阵乘法)
链接 看此题前先看一下matrix67大神写的关于十个矩阵的题目中的一个,如下: 经典题目8 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值 把给定的图转为邻 ...
- epoll的内部实现 & 百万级别句柄监听 & lt和et模式非常好的解释
epoll是Linux高效网络的基础,比如event poll(例如nodejs),是使用libev,而libev的底层就是epoll(只不过不同的平台可能用epoll,可能用kqueue). epo ...
- MyBatis中#,$的用法区别
#可以防止SQL注入 $用在一些特殊的SQL语句例如 order by ${...} , desc/asc PS:大部分用#,一些特殊情况用$
- AxureRP8实战手册(基础11-20)
本文目录 基础11. 设置文本框输入为密码 基础12. 设置打开选择文件窗口 基础13. 限制文本框输入字符位数 基础14. 设置文本框提示文字 基础15. 设置文本框回车触发事件 基础16. 设置元 ...
- Excel 2013中单元格添加下拉列表的方法
使用Excel录入数据的时候我们通常使用下拉列表来限定输入的数据,这样录入数据就很少发生错误了.Excel 2013较以前的版本发生了很大的变化,那么在Excel 2013是如何添加下拉列表的呢? 下 ...
- python--安装PIL
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,但API却非常简单易用. 安装PIL 在Debian/Ubuntu Linux ...