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