人工智能与机器学习 --- SVM算法分类可视化分析

本文通过鸢尾花和月亮数据集,对比分析了线性LDA、k-means与SVM的二分类可视化效果。SVM在非线性分类上表现出色,其优点包括使用核函数映射、间隔最大化,但同时也面临大规模样本处理困难、多分类问题挑战及参数选择敏感等缺点。
摘要由CSDN通过智能技术生成

一、鸢尾花数据集二分类可视化分析

1、线性LDA可视化

Python完整代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_classification

def LDA(X, y):
    X1 = np.array([X[i] for i in range(len(X)) if y[i] == 0])
    X2 = np.array([X[i] for i in range(len(X)) if y[i] == 1])

    len1 = len(X1)
    len2 = len(X2)

    # 求均值向量u1,u2
    miu1 = np.mean(X1, axis=0)
    miu2 = np.mean(X2, axis=0)
    # 求S_w
    # \sum_0
    conv1 = np.dot((X1 - miu1).T, (X1 - miu1))
    # \sum_1
    conv2 = np.dot((X2 - miu2).T, (X2 - miu2))
    Sw = conv1 + conv2
    # 计算w
    w = np.dot(np.mat(Sw).I, (miu1 - miu2).reshape((len(miu1), 1)))
    X1_new = np.dot(X1, w)
    X2_new = np.dot(X2, w)
    y1_new = [0 for i in range(len1)]
    y2_new = [1 for i in range(len2)]
    return X1_new, X2_new, y1_new, y2_new
def main():
    X, y = make_classification(n_samples=500, n_features=2, n_redundant=0, n_classes=2,
                               n_informative=1, n_clusters_per_class=1, class_sep=0.5, random_state=10)

    X1_new, X2_new, y1_new, y2_new = LDA(X, y)

    # 可视化原始数据
    plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)
    plt.show()
    # 可视化LDA降维后的数据
    #plt.plot(X1_new, y1_new, "bo")
    #plt.plot(X2_new, y2_new, "ro")
    #plt.show()
main()

分类结果:
在这里插入图片描述

2、k-means可视化

Python代码:

import matplotlib.pyplot as plt  
import numpy as np  
from sklearn.cluster import KMeans
from sklearn import datasets 
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:, 2:4] ##表示我们只取特征空间中的后两个维度
print(X.shape)
#绘制数据分布图
plt.scatter(X[:, 0], X[:, 1], c = "red", marker='o', label='see')  
plt.xlabel('petal length')  
plt.ylabel('petal width')  
plt.legend(loc=2)  
estimator = KMeans(n_clusters=2)#构造聚类器
estimator.fit(X)#聚类
label_pred = estimator.labels_ #获取聚类标签
#绘制k-means结果
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
#x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0
  • 9
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
关于libsvm分类结果的可视化分类曲线的可视化-加权SVM相关论文.rar 关于libsvvm分类结果的可视化分类曲线的可视化  by faruto 论坛里曾有多位朋友询问过,有关libsvvm分类结果的可视化分类曲线的可视化(可能大家感觉这个放在自己的paper里面会比较拉风,个人感觉可视化这些东西真的很虚幻,看着拉风,实则无用)。整体过程我心中明了,但实在是对可视化这种东西的鄙视,所以一直未将关于libsvm分类结果的可视化分类曲线的可视化的结果实现,并以插件函数的形式放在自己的faruto -libsvm工具箱里面。 本质其实就是用contour来实现。 今天下午把科学社会主义理论 翘掉了【我还记得代课老师说让大家查看一下科学社会主义理论和空想社会主义的区别。囧!】。在宿舍搞了一下。 原本想法是要搞就搞高级一点的,想把对于任意维的测试数据的任意两维(或任意三维)进行可视化,并给出分类超曲面,但最终未果,无法实现。【具体原因我就不说了,深入想过这个的应该会明的。】 【搞的我从下午一直搞到 晚上六点,晚饭都没吃,就直接去上的 《概率论的数学基础》课。囧!】你别看代码就几行。但里面的想法挺巧妙的。。 所以,我在这里要说的是,下面的函数插件 svmplot.m 只对两分类,且属性数据是两维的,给出的分类结果的可视化分类曲线的可视化才是有意义和准确的。对于不是两分类或属性数据不是两维的,我这个也可以给出个图,但那个的没有实际意义!切记!!切记!! {近期还想弄的就是专门对于 un-balanced data的处理的函数插件。!} 测试图: 1.jpg 代码:要的直接拿去【拿去在paper里面拉风吧!】。放在libsvm -faruto版本里面就能直接用。function svmplot % svmplot by faruto % 2009.12.03 % Email:patrick.lee@foxmail.com QQ:516667408 if nargin == 3     demension1 = 1;     demension2 = 2; end %% minX = min); maxX = max); minY = min); maxY = max); gridX = ./ 100; gridY = ./ 100; minX = minX - 10 * gridX; maxX = maxX 10 * gridX; minY = minY - 10 * gridY; maxY = maxY 10 * gridY; [bigX, bigY] = meshgrid; %% model.Parameters = 3; ntest=size * size; test_dataset=[reshape, reshape]; test_label = zeros, 1); [Z, acc] = svmpredict; bigZ = reshape, size); %% clf; hold on; grid on; ispos = ); pos = find; neg = find; h1 = plot, dataset, 'r '); h2 = plot, dataset, 'g*'); h3 = plot,model.SVs,'o' ); legend; [C,h] = contour; clabel; xlabel; ylabel; title; 复制代码代码的有一个小trick是参照了svmtoy的思路。 原本我也有思路,但这个更简便。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值