如何为RBF内核选择最佳sigma?
我正在使用单个类的分类器, 在哪个基础上,采取什么参数
答案 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,有sigma
和C
。因此,您对参数空间执行详尽搜索,其中每个轴表示一个参数及其中的一个点,是两个参数值(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
参数和准确度分数。将此应用于sigma
组catch-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>
类,并将你的一类问题转化为两类问题。