RBF内核的最佳sigma?

时间:2018-05-02 01:02:33

标签: svm

如何为RBF内核选择最佳sigma?

我正在使用单个类的分类器, 在哪个基础上,采取什么参数

2 个答案:

答案 0 :(得分:2)

取决于您使用的是哪种机器学习平台。 如果您使用的是Weka,则可以使用“网格搜索”选项来显示最佳分类参数。 (即对于线性内核,它为您提供成本函数,对于RBF-SVM,它给出了sigma / gamma和C等)

http://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html

如果您正在使用Python,我通常会做的是我在每个步骤中以小步骤和奶嘴分类精度迭代sigma值。然后我选择导致最佳准确度的西格玛。 另请注意,如果针对给定的分类任务优化SVM参数,则存在过度拟合的风险。但是,迭代步骤更改应该可以让您更好地了解过度拟合的位置(如果有!)。

祝你好运!

答案 1 :(得分:1)

我建议您使用某种Grid-Search。这是一种可以同时评估两个参数性能的技术。对于您的SVM,有sigmaC。因此,您对参数空间执行详尽搜索,其中每个轴表示一个参数及其中的一个点,是两个参数值(C_i, sigma_i)的元组。

因此,要执行此操作,您只需选择C{C_1,..., C_n}sigma{sigma_1,..., sigma_n}的集合并进行训练,然后针对每对参数对其进行测试在两组中(C_i, sigma_i)

这实际上需要相当长的时间,所以我建议你尝试类似的东西:

LibSVM例如提供K-Fold Cross-Validation,因此请设置一组sigma值,定义固定K(可能是5到10)并运行交叉验证以获取对C的一个很好的估计。记录C参数和准确度分数。将此应用于sigmacatch-all值的所有元素后,请选择在每个交叉验证过程中获得最高精度的参数对。

注意: 我建议你不要将SVM用于一类问题。即使有正式的定义,基本的SVM算法也需要两个类来确定最佳边界。因此,我建议你创建一个 <!DOTYPE html> <html> <head> <title>My website</title> <script type="text/javascript"> // The Browser API key obtained from the Google API Console. var developerKey = '############################'; // The Client ID obtained from the Google API Console. Replace with your own Client ID. var clientId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; // Scope to use to access user's photos. var scope = 'https://www.googleapis.com/auth/drive'; var appId = "1255s8a2s"; var pickerApiLoaded = false; var oauthToken; // Use the API Loader script to load google.picker and gapi.auth. function onApiLoad() { gapi.load('auth2', onAuthApiLoad); gapi.load('picker', onPickerApiLoad); gapi.client.load('drive', 'v2',handleClientLoad); } function handleClientLoad() { gapi.client.setApiKey(apiKey); window.setTimeout(onAuthApiLoad,1); } function onAuthApiLoad() { var authBtn = document.getElementById('auth'); authBtn.disabled = false; authBtn.addEventListener('click', function() { gapi.auth2.authorize({ client_id: clientId, scope: scope }, handleAuthResult); }); } function onPickerApiLoad() { pickerApiLoaded = true; createPicker(); } function handleAuthResult(authResult) { if (authResult && !authResult.error) { oauthToken = authResult.access_token; createPicker(); } } // Create and render a Picker object for picking user Photos. function createPicker() { if (pickerApiLoaded && oauthToken) { var view = new google.picker.View(google.picker.ViewId.DOCS); view.setMimeTypes("image/png,image/jpeg,image/jpg"); var picker = new google.picker.PickerBuilder(). enableFeature(google.picker.Feature.NAV_HIDDEN). enableFeature(google.picker.Feature.MULTISELECT_ENABLED). setOAuthToken(oauthToken). setAppId(appId). addView(view). setDeveloperKey(developerKey). setCallback(pickerCallback). build(); picker.setVisible(true); } } // A simple callback implementation. function pickerCallback(data) { var url = 'nothing'; var ids=[]; if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) { var ln = data[google.picker.Response.DOCUMENTS]; for(i=0;i<ln.length;i++) { ids[i] = data.docs[i].id; gapi.client.drive.files.get({'fileId': ids[1]}); } } } </script> </head> <body> <h1> Welcome to detect the colours of your image </h1> <p> Please upload required images. Let us detect what wonderful colours do your images have</p> <form id="upload-form" action="{{ url_for('upload') }}" method = "POST" enctype="multipart/form-data"> <input type = "file" name="file" accept="image/*" multiple> <input type="submit" value="upload"> </form> <form method = "POST" action="/gdrive"> <button type="button" id="auth">upload from google</button> </form> <div id="result"></div> <!-- The Google API Loader script. --> <script src="https://apis.google.com/js/platform.js?onload=init" async defer></script> <script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script> <script type="text/javascript" src="https://apis.google.com/js/api.js?onload=loadPicker"></script> </body> </html> 类,并将你的一类问题转化为两类问题。