1

나는 Kaggle 경쟁을 연구하고 Logistic Regression 분류기를 사용하여 상위 10 명의 경쟁자의 접근법을 테스트했습니다. 경쟁에Kaggle 경쟁에 대한 ROC 점수가 잘못 되었습니까?

링크 : https://www.kaggle.com/c/detecting-insults-in-social-commentary/leaderboard

난 여전히 비교적 새로운 해요 분류 문제는 그래서 난 그냥 너무 많은 수정없이 분류를 테스트했다. 이 경우 scikit-learn의 logreg를 사용했습니다. 나는 테스트/기차 데이터를 청소하고 그것을 ROC 곡선을 생성하는 데 사용했다.

커브 밑의 부분은 0.89로 제 위치에 1 위를 차지했을 것으로 생각됩니다. 이는 구현의 단순성을 고려할 때 상당히 불가능한 것처럼 보입니다. 누군가 내 프로그램이 잘못 점수를주는 무언가를하고 있는지 말해 줄 수 있습니까? 예를 들어 과장되거나 코드에 버그가 있습니까?

import csv 
import preprocessor as p 
import matplotlib.pyplot as plt 
from sklearn import linear_model 
from sklearn.feature_extraction.text import TfidfVectorizer 
from nltk.stem.snowball import SnowballStemmer 
from nltk.tokenize import word_tokenize 
from sklearn.metrics import roc_curve 
from sklearn.metrics import auc 

path = "C:\\Users\\Mike\\Desktop" 

def vectorize_dataset(subpath, stem, vectorizer): 
    comments = [] 
    labels = [] 
    stemmer = SnowballStemmer("english") 
    with open(path + subpath + '.csv', 'r') as f: 
     data_csv = csv.reader(f) 

     for row in data_csv: 
      clean_txt = p.clean(row[2]) 
      clean_txt = clean_txt.strip().replace('"', '').replace('\\\\', '\\').replace('_', ' ') 
      clean_txt = bytes(clean_txt, 'utf-8').decode('unicode_escape', 'ignore') 
      if stem: 
       clean_txt = [stemmer.stem(word.lower()) for word in word_tokenize(clean_txt)] 
      clean_txt = [word for word in clean_txt if word.isalpha()]  
      clean_txt = " ".join(clean_txt) 

      if clean_txt != "": 
       if row[0] == str(1) or row[0] == str(0): 
        comments.append(clean_txt) 
        labels.append(int(row[0])) 
    if subpath == "\\train": 
     return (vectorizer.fit_transform(comments), labels) 
    return (vectorizer.transform(comments), labels) 

def print_auroc_for_classifier(vect_tuple, classifier): 
    y_true, y_score = [], [] 

    for sample, label in zip(vect_tuple[0], vect_tuple[1]): 
     y_true.append(label) 
     y_score.append(classifier.predict_proba(sample)[0][1]) 

    fpr, tpr, thresholds = roc_curve(y_true, y_score) 
    roc_auc = auc(fpr, tpr) 
    print("ROC AUC: %.2f" % roc_auc) 

    plt.plot(fpr, tpr) 

if __name__ == '__main__':  
    plt.figure() 
    plt.xlim([0.0, 1.0]) 
    plt.ylim([0.0, 1.05]) 
    plt.xlabel('False Positive Rate') 
    plt.ylabel('True Positive Rate') 
    plt.title('Receiver operating characteristic example') 
    plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') 

    vectorizer = TfidfVectorizer() 
    train_tuple = vectorize_dataset('\\train', True, vectorizer) 
    test_tuple = vectorize_dataset('\\test', True, vectorizer) 

    logreg = linear_model.LogisticRegression(C=7) 
    logreg.fit(train_tuple[0].toarray(), train_tuple[1]) 

    print_auroc_for_classifier(test_tuple, logreg) 

지침 : Kaggle 링크에서

  1. 는 train.csv 및 test_with_solutions.csv을 다운로드 할 수 있습니다. 이 경우 https://www.kaggle.com/c/detecting-insults-in-social-commentary/data
  2. 이름 바꾸기 test_with_solutions.csv 코드에서
  3. C 매개 변수의

내가 너무 많은 이해하지 않는 .CSV 파일의 경로로 path을 설정 test.csv하고 그 이유는 내 점수가 높기 때문에 알려 주시면 좋은 가치를 발견하는 데 조언을 주시면 감사하겠습니다. 감사.

접근 방식 :

읽기 파일을 .csv로 텍스트 청소
  1. (사용 된 프리 프로세서 패키지를 수동으로 교체 특정 문자)
  2. 사용 눈덩이 형태소 분석기 및 각 단어의 isalpha에를 확인()
  3. 벡터 라이 테스트 기차 데이터는 scikit 배우기의 TfidfVectorizer를 사용
  4. 훈련 데이터
  5. 계산 및 플롯 ROC 곡선
  6. 기차 logreg

편집 :

그래서 나는 C 매개 변수와 주변 재생 및 1E5으로 높은 값으로 C를 설정하는 것은 나에게 낮은 ROC 곡선 영역을 제공합니다. 아마 지금의 주요 질문은, 내가 C를 최적화하여 C를 최고 ROC 곡선 영역으로 만들고 코드가 정확하고 C가 튜닝에 필요한 매개 변수라고 가정해야할까요?

Edit2 : GridSearchSV를 사용하여 0.1에서 10까지의 범위에서 C를 테스트했지만 여전히 높은 결과를 보였습니다 (지난 10 회 이후 0.1 회는 아무 것도하지 않았습니다).

답변

0

다른 테스트 데이터를 사용하고 있습니다. test.csv 파일을 사용하여 C의 최적 모델과 값을 찾은 다음 impermium_verification_set.csv에서만 평가하십시오. 경쟁이 진행 중이고 모델 만 찾으면 테스트가 가능한 것처럼 보이고 모델은 잠겨 리더 보드는 검증 세트를 기반으로했습니다. 가장 좋은 모델을 선택하기 위해 두 세트의 전체 세트를 사용하고 있습니다.

원하는 경우 Kaggle 경쟁 페이지의 토론 게시판에서 언제든지 물어볼 수 있습니다. 나는 사람들이 도움을 줄 것이라고 확신합니다. 또한 우승자를 포함하여 일부 최고 입후보자가 관심 주제로 토론 코드에 자신의 코드를 올렸습니다.

+0

정말 고마워요. imperium_verification_set.csv를 사용하고 0.78의 ROC를 받았습니다. 그래서 test_with_solutions.csv에는 test.csv와 imperium_verification_set.csv가 둘 다 있습니까? 또한 당신은 테스트가 모델을 찾는 데 사용되었다고 언급했습니다 ... 기차를 의미 했습니까? – Mike

+0

예 두 세트가 모두 포함되어 있다고 생각합니다. 모델을 튜닝 할 때 트레이닝 세트로 교차 검증을 할 수 있습니다. 많은 모델을 교육 한 경우 경쟁 테스트를 위해 제출하는 테스트 세트 점수가 가장 높을 것입니다. –