2

FANN 라이브러리의 도움으로 간단한 스팸 분류기를 작성하려고했습니다. 그렇게하기 위해 나는 많은 스팸 메일과 햄 편지를 모으고, 가장 많이 사용 된 영어 단어 사전을 수집했다.스팸 분류 작업에서의 이상한 FANN 동작

num_input = get_input_size(dictionary_size) 
num_output = 1 

ann.create_standard_array((num_input, num_neurons_hidden, num_output)) 
ann.set_activation_function_hidden(libfann.SIGMOID_SYMMETRIC) 
ann.set_activation_function_output(libfann.SIGMOID_SYMMETRIC) 
ann.set_training_algorithm(libfann.TRAIN_INCREMENTAL) 

출력이 편지가 햄 인 경우 1이고 -1 스팸 때 : 나는 다음 코드를 사용하여 하나 개의 숨겨진 층으로 신경 네트워크를 만들었습니다. 각 입력 뉴런은 특정 단어가 전자 메일에 있었는지 아닌지를 나타냅니다 (1 단어는 메일에 있었고 0은 아니 었습니다).

신경망을 학습하려면 다음 코드를 사용합니다. 각 전자 메일 ( : 테스트 세트에서 전자 메일을 나는 다음과 같은 코드를 사용하여 스팸인지 아닌지 는 (훈련 세트의 각 전자 메일 편지를 들어)

# Create input from train e-mail letter 
input = get_input(train_res, train_file, dictionary)    
ann.train(input, (train_res,)) 

확인하려면 내 네트워크가 가정 교육을받은 후 시험 세트)에 상관없이 내가 사용하는 사전의 어떤 크기

input = get_input(SPAM, test_spam, dictionary) 
res = ann.run(input)[0] 

하지만 (I 1000 개 40000 개 단어 단어) 또는 숨겨진 레이어 (640-20)에서 신경 세포의 수에서 시도 거의 모든 전자 메일이 스팸이거나 햄입니다.

거의 모든 스팸 메일은 다음과 같이 올바르게 분류되어 있지만 모든 햄이 잘못 분류되는, 또는 결과
Dictionary size: 10000 
Hidden layer size: 80 
Correctly classified hams: 596 
Incorrectly classified hams: 3845 
Correctly classified spams: 436 
Incorrectly classified spams: 62 

: oposite 있습니다

Dictionary size: 20000 
Hidden layer size: 20 
Correctly classified hams: 4124 
Incorrectly classified hams: 397 
Correctly classified spams: 116 
Incorrectly classified spams: 385 

예를 들어이 같은 두 결과를받을 수 있습니다. 더 많은 교육 데이터를 사용하려고했습니다. 필자는 약 1000 개의 전자 메일을 학습 세트에서 시작했는데 (스팸의 비율은 거의 50:50 임) 이제 약 4000 개의 전자 메일 (스팸 : 약 50:50)으로 테스트하고 있습니다. 결과는 같은.

가능한 문제점은 무엇입니까? 미리 감사드립니다.

답변

1

스팸과 햄 메일의 차이점은 단어 목록의 단어 내용과 관련이 있다고 주장하셨습니까? 내 생각에 정규 단어의 내용에 관해서는 스팸과 햄 사이에 명확한 차이가 없을 수도 있습니다.

'실제'스팸 메일을 사용하는 경우 많은 스팸 메일 발신자는 베이지안 중독을 사용합니다. 스팸 필터를 혼동하기 위해 많은 '합법적 인'텍스트가 포함되어 있습니다. 통계적으로 스팸/햄에 공통적 인 단어가 아닌 일반 단어의 내용 만 필터링하므로 베이지안 중독에 매우 민감합니다.

+0

답변 해 주셔서 감사합니다. 당신은 "보통 단어의 내용에 단순히 걸러 내고 스팸/햄에 통계적으로 공통된 단어가 아니므로 베이지안 중독에 매우 민감합니다." 보다 적절하다고 생각하는 접근 방식에 대해 더 자세한 내용을 작성하거나 (기사, 서적 등을 제공 할 수 있습니까?) –

+0

ANN에 대해 배우려고하거나 좋은 스팸 필터가 필요하기 때문에이 작업을 수행하고 있습니까? 스팸 필터가 필요한 경우 ANN 방식을 포기해야한다고 생각합니다. 수 있습니다 시작하는 좋은 장소 [위키 피 디아 (http://en.wikipedia.org/wiki/Bayesian_spam_filtering) 단순히 내가 그것을에서 패턴 인식을 시도하는 더 좋을 거라 생각 신경망을 배우려고 노력하는 경우 이미지 또는 그와 유사한 것이 실제로는 잘 작동합니다. ANN으로 스팸 필터링을 설정 한 경우 메일, 일반적인 단어, 문자 수 등의 일부 기능을 추출하려고합니다. – Niclas

+0

당신이 옳다고 생각합니다. 내가 네트워크를 훈련시킬 수없는 이유는 베이 즈 중독 때문이었습니다. 다른 훈련 전략을 시도했지만 도움이되지 않았습니다. –

0

나는 FANN에 대해 많이 알지 못하지만 스팸 분류를 위해서는 교육 요령이 중요합니다. 우선 : 모든 햄 메일과 모든 스팸 메일을 훈련하지 마십시오. 그것들을 함께 섞어서, 무작위로 메일을 골라 내고, 햄이나 스팸 여부와 관계없이 그것을 훈련 시키십시오.

그 외에도 특정 메시지에 대해 분류자를 교육해야하는지 여부를 결정하는 데는 여러 가지 방법이 있습니다. 예를 들어 분류기가 이미 메시지가 스팸이라고 생각하고 스팸으로 분류하면 해당 메시지의 단어에 대해 부당한 편견을 갖게됩니다.

가능한 훈련 요법은 다음과 같습니다 (이에 국한되지 않음) :

  • TEFT (기차 모두를)

    기차의 모든 것을 한 번. 보통 좋은 선택이 아닙니다.

  • TOE (오류에 기차)

    기차는 메일에 분류가 잘못 가져옵니다.

  • TTR (두꺼운 임계 교육)

    기차 모든 메일은 분류가 잘못 도착, 또는 "두께 임계 값"에 그 거짓말. 예를 들어, 0.0 미만의 모든 메일이 스팸 일 경우 -0.05와 0.05 사이에 분류 된 모든 이메일에 대해 교육을 수행하십시오. 분류가 제대로 모든 교육의 메일을 분류 할 때까지

  • TUNE 반복 (없음 오류까지 기차)

    음주 TOE 또는 TTR. 이것은 도움이 될 수 있지만, 교육 자료에 따라 다칠 수도 있습니다.

는 이들 각각에 변화가 있지만 두꺼운 임계 교육은 일반적으로 좋은 결과를 줄 것이다 : 그것은 모든 메일을 훈련하지 않기 때문에, 그것은 '돈 스팸에 나타나는 단어에 대한 작은 편견이다, 그러나 햄/스팸 결정에 도움이되지 않습니다 (예를 들어 니클라스가 언급 한 베이 즈 중독). 국경선의 경우 훈련을하기 때문에 훈련에서 올바르게 분류 했음에도 불구하고 그러한 경계선 사례에 대한 경험이 더 많아졌고 실제 사용에 대해 바보가 될 가능성이 적습니다.

마지막으로 : 신경망을 사용하여 신경 회로망을 사용한다고 가정하고 있지만 실제로 스팸을 걸러 내야하는 경우 일반적으로 Naive Bayes 또는 Winnow algorithm이 더 적절합니다.

+0

답변 해 주셔서 대단히 감사합니다. 나는이 훈련 과정을 시도해보고 효과가 있는지 기록 할 것이다. –