Python 은 기계 학습 알고리즘 을 이용 하여 스 팸 메 일의 식별 을 실현 한다.

개발 도구
**Python 버 전:*3.6.4
관련 모듈:
scikit-learn 모듈;
jieba 모듈;
numpy 모듈;
파 이 썬 자체 모듈 도 있 습 니 다.
환경 구축
Python 을 설치 하고 환경 변수 에 추가 하면 pip 설치 에 필요 한 관련 모듈 을 설치 하면 됩 니 다.
점진 적 실현
(1)구분 데이터 세트
인터넷 에서 스 팸 메 일 인식 에 사용 되 는 데이터 세트 는 대부분 영어 메 일이 기 때문에 성 의 를 표시 하기 위해 나 는 시간 을 들 여 중국어 메 일의 데이터 세트 를 찾 았 다.데이터 세트 는 다음 과 같이 구분 합 니 다.
훈련 데이터 세트:
7063 통 의 정상 메 일(data/normal 폴 더 아래);
7775 통 스 팸 메 일(data/spam 폴 더 아래).
테스트 데이터 세트:
모두 392 통 의 메 일(data/test 폴 더 아래)입 니 다.
(2)사전 만 들 기
데이터 세트 의 메 일 내용 은 일반적으로 다음 과 같 습 니 다.
图片
우선,우 리 는 정규 표현 식 을 이용 하여 비 중국어 문 자 를 걸 러 낸 다음 에 jieba 분사 라 이브 러 리 로 문 구 를 나 누고 정 지 된 단 어 를 제거 한 다음 에 상기 결 과 를 이용 하여 사전 을 만 듭 니 다.사전 형식 은 다음 과 같 습 니 다.
{"단어 1":단어 1 주파수,"단어 2":단어 2 주파수...}
이러한 내용 의 구체 적 인 실현 은 모두**"utils.py"*파일 에 나타 나 고 메 인 프로그램(train.py)에서 호출 하면 됩 니 다.
图片
최종 결 과 는**"results.pkl"*파일 에 저 장 됩 니 다.
큰 성 과 를 거 두 었 습 니까?당연히 없 지!!!
현재 의 사전 에는 52113 개의 단어 가 있 는데 분명히 너무 많다.어떤 단어 들 은 한두 번 밖 에 나타 나 지 않 았 고 후속 적 인 특징 을 추출 할 때 한 차원 을 차지 하 는 것 은 현명 하지 못 한 방법 이다.따라서 우 리 는 단어의 빈도 가 가장 높 은 4000 개의 단어 만 최종 적 으로 만 든 사전 으로 보존 합 니 다.
图片
최종 결 과 는**"words Dict.pkl"*파일 에 저 장 됩 니 다.
(3)특징 추출
사전 이 준 비 된 후에 우 리 는 모든 편지 의 내용 을 단어 벡터 로 바 꿀 수 있다.분명히 그 차원 은 4000 이 고 1 차원 마다 고주파 단어 가 이 편지 에서 나타 나 는 빈 도 를 대표 한다.마지막 으로 우 리 는 이 단어 들 의 벡터 를 큰 특징 벡터 행렬 로 합 쳤 다.그 크기 는 다음 과 같다.
(7063+7775)×4000
즉,전 7063 행위 정상 메 일의 특징 벡터 이 고 나머지 는 스 팸 메 일의 특징 벡터 이다.
상기 내용 의 구체 적 인 실현 은 여전히**"utils.py"**파일 에 나타 나 고 메 인 프로그램 에서 다음 과 같이 호출 됩 니 다.
图片
최종 결 과 는**"fvs%에 저 장 됩 니 다.d_%d.npy'**파일 에서 첫 번 째 형식 부 호 는 정상 적 인 메 일의 수량 을 나타 내 고 두 번 째 형식 부 호 는 스 팸 메 일의 수량 을 나타 낸다.
(4)분류 기 훈련
우 리 는 scikit-learn 기계 학습 라 이브 러 리 를 사용 하여 분류 기 를 훈련 시 키 고 모델 은 소박 한 베 이 루스 분류 기와 SVM(벡터 지원)을 선택 합 니 다.
图片
(5)성능 테스트
테스트 데이터 세트 를 이용 하여 모델 을 테스트 합 니 다:
图片
결 과 는 다음 과 같다.
图片
图片
두 모델 의 성능 은 차이 가 많 지 않 은 것 으로 나 타 났 으 나 SVM 은 스 팸 메 일 에 대한 판정 을 선 호 하 는 것 으로 나 타 났 다.
파 이 썬 의 스 팸 메 일 인식 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 의 스 팸 메 일 인식 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기