• 支持向量机-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_)
    
  • 相关阅读:
    sqlserver 保留2位小数的写法
    Kettle 数据预览 乱码
    finereport 数据分析预览 居中 参数分割 自动查询
    Unable to locate value meta plugin of type (id)
    mysql8.0
    MySQL 搭建MHA高可用架构
    Java性能调优工具
    helm 部署etcd
    阿里云pv 使用
    ldconfig 引起的事故
  • 原文地址:https://www.cnblogs.com/jly1/p/13093404.html
Copyright © 2020-2023  润新知