zoukankan      html  css  js  c++  java
  • 支持向量机-SVC

    支持向量机

    • 支持向量机是比较有效的机器学习算法,通过找到支持向量,找到最大的决策边界。
    
    from sklearn.datasets import make_blobs
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 构造数据集
    X, y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.6)
    # plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
    # plt.show()
    
    # 训练一个基本的SVC
    from sklearn.svm import SVC
    model = SVC(kernel='linear')
    model.fit(X, y)
    
    
    # 可以打印出支持向量的最近的点的坐标
    print(model.support_vectors_)
    
    # 支持向量不变,决策边界不变。
    
    # 引入核函数
    from sklearn.datasets import make_circles
    X, y = make_circles(100, factor=.1, noise=.1)
    
    clf = SVC(kernel='linear').fit(X, y)
    
    # plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
    # plt.show()
    
    # 试试高纬度,高斯核函数,高斯变换, 核变换,比如二维变成三维,
    # 径向基函数rbf,
    clf = SVC(kernel='rbf', C=1E6)
    clf.fit(X, y)
    
    # plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
    # plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=300, lw=1, facecolors='none')
    # plt.show()
    
    
    # 调节SVM参数,soft Margin 问题
    # 调节C参数
    # 当C趋近于无穷大,意味着分类严格不能有错误
    # 当C趋近于很小的时候,意味着可以有更大的错误容忍
    X, y = make_blobs(n_samples=100, centers=2, random_state=0, cluster_std=0.8)
    plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
    plt.show()
    
    # gamma 值,控制着模型的复杂程度
    # 越大,模型的复杂程度越大。
    

    支持向量机实现一个人脸分类的项目

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.datasets import fetch_lfw_people
    faces = fetch_lfw_people(min_faces_per_person=60)
    print(faces.target_names)
    print(faces.images.shape)
    
    
    # 画出图像
    
    fig, ax = plt.subplots(3, 5)
    for i, axi in enumerate(ax.flat):
        axi.imshow(faces.images[i], cmap='bone')
        axi.set(xticks=[], yticks=[], xlabel=faces.target_names[faces.target[i]])
    plt.show()
    
    # 图片的维度很高,每一个点都是一个特征,特征太多了,我们降维度,PCA
    from sklearn.svm import SVC
    from sklearn.decomposition import PCA
    from sklearn.pipeline import make_pipeline
    
    pca = PCA(n_components=150, whiten=True, random_state=42)
    svc = SVC(kernel='rbf', class_weight='balanced')
    model = make_pipeline(pca, svc)
    
    # 构建测试集和训练集
    from sklearn.model_selection import train_test_split
    
    Xtrain, Xtest, ytrain, ytest = train_test_split(faces.data, faces.target, random_state=40)
    
    
    # 使用网格来搜索最佳参数
    from sklearn.model_selection import GridSearchCV
    param_grid = {'SVC_C': [1, 5, 10], 'svc_gamma':[0.0001, 0.0005, 0.001]}
    grid = GridSearchCV(model, param_grid)
    
    print(grid.best_params_)
    
  • 相关阅读:
    大道至简读后感(第二章)
    大道至简读后感
    将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档
    python之基础
    python之面向对象
    python之网络编程
    python之函数
    Managing SharePoint 2010 Farm Solutions with Windows PowerShell
    Oracle RMAN vs. Export?
    转帖在oracle中自动大批量生成测试数据
  • 原文地址:https://www.cnblogs.com/jly1/p/13093404.html
Copyright © 2011-2022 走看看