Atualmente, estou usando um SVM com um kernel linear para classificar meus dados. Não há erro no conjunto de treinamento. Tentei vários valores para o parâmetro ( 10 - 5 , … , 10 2 ). Isso não alterou o erro no conjunto de teste.
Agora eu me pergunto: isso é um erro causado pelas ligações do ruby porque libsvm
estou usando ( rb-libsvm ) ou isso é teoricamente explicável ?
O parâmetro sempre alterar o desempenho do classificador?
machine-learning
svm
libsvm
alfa
fonte
fonte
Respostas:
O parâmetro C informa à otimização do SVM quanto você deseja evitar classificar incorretamente cada exemplo de treinamento. Para valores grandes de C, a otimização escolherá um hiperplano de margem menor se esse hiperplano fizer um trabalho melhor para obter todos os pontos de treinamento classificados corretamente. Por outro lado, um valor muito pequeno de C fará com que o otimizador procure um hiperplano de separação de margem maior, mesmo que esse hiperplano classifique incorretamente mais pontos. Para valores muito pequenos de C, você deve obter exemplos mal classificados, geralmente mesmo que seus dados de treinamento sejam linearmente separáveis.
fonte
Em um SVM, você está procurando por duas coisas: um hiperplano com a maior margem mínima e um hiperplano que separa corretamente o maior número possível de instâncias. O problema é que nem sempre você conseguirá as duas coisas. O parâmetro c determina quão grande é o seu desejo para o último. Eu desenhei um pequeno exemplo abaixo para ilustrar isso. À esquerda, você tem um c baixo, o que fornece uma margem mínima bastante grande (roxa). No entanto, isso exige que negligenciemos o círculo azul que não conseguimos classificar correto. À direita, você tem um alto c. Agora você não negligenciará o outlier e, portanto, terá uma margem muito menor.
Então, qual desses classificadores é o melhor? Isso depende da aparência dos dados futuros que você irá prever e, na maioria das vezes, você não sabe disso, é claro. Se os dados futuros forem assim:
então, o classificador aprendido usando um valor c grande é o melhor.
Por outro lado, se os dados futuros forem assim:
então, o classificador aprendido usando um valor c baixo é o melhor.
Dependendo do seu conjunto de dados, alterar c pode ou não produzir um hiperplano diferente. Se isso acontecer produzir um hiperplano diferente, isso não implica que o classificador irá saída classes diferentes para os dados específico que você tê-lo usado para classificar. O Weka é uma boa ferramenta para visualizar dados e brincar com diferentes configurações para um SVM. Isso pode ajudá-lo a ter uma idéia melhor da aparência de seus dados e por que alterar o valor c não altera o erro de classificação. Em geral, ter poucas instâncias de treinamento e muitos atributos facilita a separação linear dos dados. Além disso, o fato de você estar avaliando seus dados de treinamento e não os novos dados invisíveis facilita a separação.
De que tipo de dados você está tentando aprender um modelo? Quantos dados? Podemos ver isso?
fonte
C é essencialmente um parâmetro de regularização, que controla o compromisso entre obter um baixo erro nos dados de treinamento e minimizar a norma dos pesos. É análogo ao parâmetro cume na regressão cume (na verdade, na prática, há pouca diferença no desempenho ou na teoria entre SVMs lineares e regressão cume, então geralmente uso o último - ou regressão cume do núcleo, se houver mais atributos do que observações).
O ajuste correto de C é uma etapa vital das melhores práticas no uso de SVMs, pois a minimização de risco estrutural (o princípio fundamental por trás da abordagem básica) é implementada através do ajuste de C. O parâmetro C impõe um limite superior à norma do pesos, o que significa que existe um conjunto aninhado de classes de hipóteses indexadas por C. À medida que aumentamos C, aumentamos a complexidade da classe de hipóteses (se aumentarmos ligeiramente C, ainda podemos formar todos os modelos lineares que poderíamos antes e também alguns que não podíamos antes de aumentarmos o limite superior da norma permitida dos pesos). Além de implementar o SRM por meio da classificação de margem máxima, ele também é implementado limitando a complexidade da classe de hipótese através do controle C.
Infelizmente, a teoria para determinar como definir C não está muito bem desenvolvida no momento; portanto, a maioria das pessoas tende a usar a validação cruzada (se fizer alguma coisa).
fonte
C é um parâmetro de regularização que controla a troca entre obter um baixo erro de treinamento e um baixo erro de teste, que é a capacidade de generalizar seu classificador para dados não vistos.
Considere a função objetivo de um SVM linear: min | w | ^ 2 + C∑ξ. Se seu C for muito grande, o algoritmo de otimização tentará reduzir | w | o máximo possível, levando a um hiperplano que tenta classificar cada exemplo de treinamento corretamente. Fazer isso levará à perda nas propriedades de generalização do classificador. Por outro lado, se seu C for muito pequeno, você concederá à sua função objetivo certa liberdade para aumentar | w | muito, o que levará a um grande erro de treinamento.
As figuras abaixo podem ajudá-lo a visualizar isso.
fonte
As respostas acima são excelentes. Depois de ler atentamente suas perguntas, descobri que há dois fatos importantes que podemos ignorar.
Dado os 2 fatos, se os valores de C mudarem dentro de um intervalo razoável, o hiperplano ideal mudará aleatoriamente apenas uma pequena quantidade dentro da margem (a lacuna formada pelos vetores de suporte).
Intuitivamente, suponha que a margem nos dados de treinamento seja pequena e / ou não haja pontos de dados de teste dentro da margem também, a mudança do hiperplano ideal dentro da margem não afetará o erro de classificação do conjunto de testes.
No entanto, se você definir C = 0, o SVM ignorará os erros e apenas tentará minimizar a soma dos quadrados dos pesos (w), talvez você possa obter resultados diferentes no conjunto de testes.
fonte
O parâmetro C é usado para controlar os valores discrepantes - C baixo implica que estamos permitindo mais discrepantes, C alto implica que estamos permitindo menos discrepantes.
fonte
Alto C (custo) significa que o custo da classificação incorreta é aumentado. Isso significa que um kernel flexível se tornará mais irregular para evitar observações errôneas no conjunto de treinamento.
Se o kernel for muito irregular, o modelo não generalizará bem ao prever novos dados.
Se o kernel for reto, o modelo não generalizará bem ao prever novos dados.
fonte