1. 程式人生 > >sklearn學習——SVM例程總結(PCA+Pipline+cv+GridSearch)

sklearn學習——SVM例程總結(PCA+Pipline+cv+GridSearch)

Introduction

其實對於SVM調節超引數不需要這麼複雜,因為gamma可能更重要一點,固定C=1,手動調節gamma即可。此外,sklearn的網格搜尋極其的慢,下面的程式碼出來結果至少要半個多小時,如果有經驗根本不需要。對於有經驗的人來說或許看學習曲線就能知道調什麼引數。但是為什麼還要這麼做呢?可能是為了裝吧,或許更直觀一點,不需要老中醫式的隨便開點良藥,看看效果再換藥了!

PCA:主成分分析

Pipline: 管道機制官網

GridSearch:官網

Method

下面給出修改後的程式碼,裡面都有註釋,直接拿回去慢慢調:

資料是sklearn自帶的,資料量不大,如果是比賽資料,根本沒法跑,太慢了!!!

官網例程:比較三種降維方法:PCA+NMF(非負矩陣分解)+KBest

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
=================================================================
Selecting dimensionality reduction with Pipeline and GridSearchCV
=================================================================

This example constructs a pipeline that does dimensionality
reduction followed by prediction with a support vector
classifier. It demonstrates the use of GridSearchCV and
Pipeline to optimize over different classes of estimators in a
single CV run -- unsupervised PCA and NMF dimensionality
reductions are compared to univariate feature selection during
the grid search.
"""
# Authors: Robert McGibbon, Joel Nothman

from __future__ import print_function, division

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.model_selection import StratifiedShuffleSplit#分層洗牌分割交叉驗證
from sklearn.svm import LinearSVC
from sklearn.decomposition import PCA, NMF
from sklearn.feature_selection import SelectKBest, chi2

digits = load_digits()

print(__doc__)

pipe = Pipeline([
    ('reduce_dim', PCA()),
    ('classify', LinearSVC())
])

N_FEATURES_OPTIONS = [2, 4, 8]
C_OPTIONS = [1, 10, 100, 1000]
param_grid = [
    {
        'reduce_dim': [PCA(iterated_power=7), NMF()],
        'reduce_dim__n_components': N_FEATURES_OPTIONS,
        'classify__C': C_OPTIONS
    },
    {
        'reduce_dim': [SelectKBest(chi2)],
        'reduce_dim__k': N_FEATURES_OPTIONS,
        'classify__C': C_OPTIONS
    },
]
reducer_labels = ['PCA', 'NMF', 'KBest(chi2)']
cv = StratifiedShuffleSplit(n_splits=10, test_size=0.2, random_state=42)
grid = GridSearchCV(pipe, cv=3, n_jobs=2, param_grid=param_grid)

grid.fit(digits.data, digits.target)

mean_scores = np.array(grid.cv_results_['mean_test_score'])
# scores are in the order of param_grid iteration, which is alphabetical
mean_scores = mean_scores.reshape(len(C_OPTIONS), -1, len(N_FEATURES_OPTIONS))
# select score for best C
mean_scores = mean_scores.max(axis=0)
bar_offsets = (np.arange(len(N_FEATURES_OPTIONS)) *
               (len(reducer_labels) + 1) + .5)

plt.figure()
COLORS = 'bgrcmyk'
for i, (label, reducer_scores) in enumerate(zip(reducer_labels, mean_scores)):
    plt.bar(bar_offsets + i, reducer_scores, label=label, color=COLORS[i])

plt.title("Comparing feature reduction techniques")
plt.xlabel('Reduced number of features')
plt.xticks(bar_offsets + len(reducer_labels) / 2, N_FEATURES_OPTIONS)
plt.ylabel('Digit classification accuracy')
plt.ylim((0, 1))
plt.legend(loc='upper left')
plt.show()

尋找最優超引數:

# -*- coding: utf-8 -*-
"""
Created on Wed Jul 26 22:06:34 2017

@author: qiu
"""

from __future__ import print_function, division

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.model_selection import StratifiedShuffleSplit#分層洗牌分割交叉驗證
from sklearn.svm import SVC
from sklearn.decomposition import PCA, NMF
from sklearn.feature_selection import SelectKBest, chi2

digits = load_digits()

#網格搜尋視覺化——熱力圖
pipe = Pipeline(steps=[
                       
    ('classify',  SVC())
])
C_range = np.logspace(-2, 1, 4)# logspace(a,b,N)把10的a次方到10的b次方區間分成N份
gamma_range = np.logspace(-9, -6, 4)
param_grid = [
    {
        'classify__C': C_range,
        'classify__gamma': gamma_range
    },
]

cv = StratifiedShuffleSplit(n_splits=10, test_size=0.2, random_state=42)

grid = GridSearchCV(pipe, param_grid=param_grid, cv=cv)#基於交叉驗證的網格搜尋。

grid.fit(digits.data, digits.target)

print("The best parameters are %s with a score of %0.2f"
      % (grid.best_params_, grid.best_score_))#找到最佳超引數



未完待續。。。

在獲取最佳引數後畫學習曲線,參考

相關推薦

sklearn學習——SVM總結(PCA+Pipline+cv+GridSearch)

Introduction 其實對於SVM調節超引數不需要這麼複雜,因為gamma可能更重要一點,固定C=1,手動調節gamma即可。此外,sklearn的網格搜尋極其的慢,下面的程式碼出來結果至少要半個多小時,如果有經驗根本不需要。對於有經驗的人來說或許看學習曲線就能知道調

STM32_Systick學習改寫

涉及的參考來自:野火的《【野火®】零死角玩轉STM32—F103霸道》、野火例程 1.systick進中斷不用清標誌的,這個好奇怪,難道是因為它是核心外設?   2.第二個不同之處是它的優先順序的奇怪,其優先順序沒有主和子優先順序之說,並且STM32只保留了其高4bit有效,也

命名管道學習(簡單)----Windows程序間通訊

管道(Pipe)實際是用於程序間通訊的一段共享記憶體,建立管道的程序稱為管道伺服器,連線到一個管道的程序為管道客戶機。通常我們把管道分為匿名管道和命名管道。但對於匿名管道的話,只能在本機上程序之間通訊,而且只能實現本地的父子程序之間的通訊,侷限性太大了。而這裡介紹的命名管道,就和匿名管道有些不同了,

學習OpenCV-實踐(持續更新)

 例4-1:用滑鼠在視窗中畫方形的程式 #include"pch.h"//看情況加 #include <cv.h> #include <highgui.h> CvRect box; //定義繪製的矩形 bool drawing_box = false; //狀

(3)CC3200學習,連線個人Wi-Fi

該例程名字叫wlan_station,連線示意圖如下 CC3200連線到個人路由器,然後通過外網連線到TI的官網。 在應用時,可以對該例程進行修改,然後即可實現自己想要的功能。 在CCS中開啟例程ti_rtos_config,oslib,simplelink,wlan_s

OpenCV 自帶總結

http://lv.xiao.yu.blog.163.com/blog/static/5419127320138191291534/ opencv 2.4.4版本共100個自帶例子。 parter 1: No1. adaptiveskindetector.cpp 利用HSV空間的色調資訊的面板檢測,背景不能有

TMS320C6474學習總結(五)----DSP/BIOS自帶 mailbox exampe 詳解

附上例程的主程式: #include <std.h> #include <log.h> #include <mbx.h> #include <tsk.h> #include "mailboxcfg.h" #defi

React學習筆記--Tic Tac Toe填坑

order implement pla fff webkit mov 沒有反應 mar vertica React學習筆記 三 Tic Tac Toe例程填坑   React開發環境搭建好後,就是對React本身進行學習了,React官方的Tic

零基礎學習python編不可錯過的學習總結,小白福利!

不執行 方式 true hat 出現 結合 conda tab鍵 底層 一 軟件使用 1 第一句Python 在C盤根目錄下,創建1.tx文本,打開並輸入如下內容保存。 #!/usr/bin/env python #-*- coding:utf8 -*- print("人

[python機器學習及實踐(6)]Sklearn實現主成分分析(PCA

相關性 hit 變量 gray tran total 空間 mach show 1.PCA原理 主成分分析(Principal Component Analysis,PCA), 是一種統計方法。通過正交變換將一組可能存在相關性的變量轉換為一組線性不相關的變量,轉換後的這組

《C#並發編經典實學習筆記-進(process)和線(thread)

靜態 編輯 有序 經歷 單線程 發生 私有 數據 inf 本文主要參考自孫鐘秀主編的《操作系統教程》一書中關於進程和線程的部分。 進程 為什麽引入進程? 一,刻畫系統動態性,發揮系統並發性,提高資源利用率。 以C#為例,在編輯器Visual Studio Code寫了幾行代

Halcon學習之瓶口缺陷檢測

* 這個例子檢查瓶口缺陷, * 首先找到瓶口,找瓶口的方法就通過自動閾值,然後進行圓擬合 *邊緣檢測,找到邊緣之後縮小圓,找到瓶口這一個圓帶狀影象 *把圓帶拉抻變換成長方形,這樣其實是為了使用平均值濾波,把視窗的設定為【500,3】大小,這樣就可以把垂直方向的差異提取出來 *然後再通過dyn_thr

sklearn學習筆記之svm

支援向量機: # -*- coding: utf-8 -*- import sklearn from sklearn.svm import SVC import matplotlib.pyplot as plt from sklearn.model_selection import tra

TurtleBot3總結

遠端終端 [turtleBot3] sudo apt-get install ssh sudo raspi-config #選擇 Interfacing Options #導航並選擇SSH #選擇Yes #選擇OK #選擇Finish [PC] ssh co

零基礎入門學習51微控制器教程,教材書籍+視訊教程+程式碼+學習資料+掃碼應用

[本書特色: 本書巧妙地將對微控制器原理的講述與硬體實驗裝置結合起來,列舉了大量有趣易懂的小例子,深入淺出地用實操案例來講述微控制器的工作原理、擴充套件知識、程式設計技巧,講授微控制器專案開發的流程及方法。綜合王老師多年專案經驗及教研成果,內容細緻、風格突出、是一本全面講述51微控制器

【SciKit-Learn學習筆記】7:PCA結合SVM做AT&T資料集人物影象分類

學習《scikit-learn機器學習》時的一些實踐。 原理見PCA及繪製降維與恢復示意圖。 sklearn的PCA sklearn中包裝的PCA也是不帶有歸一化和縮放等預處理操作的,可以用MinMaxScaler()實現並裝在Pipeline裡封裝起來。 from

sklearn學習筆記(3)svm多分類

SVC、NuSVC、LinearSVC都可以在一個數據集上實現多分類。 SVC和NuSVC方法類似,但是有不同的輸入引數集和不同的數學表述。另一方面,linearSVC是SVC的線上性核的基礎上的另一種實現,所以LinearSVC不能不能接受關鍵字“kerne

sklearn學習』不同的 SVM 分類器

#! usr/bin/env python # coding:utf-8 """ __author__ = "LCG22" __date__ = "2016-12-5" """ import nu

FreeRTOS10學習(一)

官網下載source-code-for-book-examples壓縮包,解壓後得到VS工程,開啟source-code-for-book-examples\Win32-simulator-MSVC\RTOSDemo.sln後有Examples001-025。

opencv學習haar分類器

# -*- coding: utf-8 -*-import cv2import sys img = cv2.imread(sys.argv[1]) # 載入分類器face_haar = cv2.CascadeClassifier("data/haarcascades/haar