나는 이러한 개념을 배우기 위해 고군분투하고 있으므로 이것에 최대 현상금을 걸 것입니다! 로지스틱 회귀에서 일부 순위 데이터를 사용하려고합니다. 저는 기계 학습을 사용하여 웹 페이지가 "좋은"것인지 아닌지에 대한 간단한 분류기를 만들고 싶습니다. 이것은 단지 학습 연습 일 뿐이므로 좋은 결과를 기대하지는 않습니다. "프로세스"와 코딩 기술을 배우고 싶어합니다.
다음과 같이 내 데이터를 .csv에 넣었습니다.
URL WebsiteText AlexaRank GooglePageRank
내 테스트 CSV에는 다음이 있습니다.
URL WebsiteText AlexaRank GooglePageRank Label
레이블은 "좋음"(1) 또는 "나쁨"(0)을 나타내는 이진 분류입니다.
현재 웹 사이트 텍스트 만 사용하여 LR을 실행하고 있습니다. TF-IDF를 실행합니다.
도움이 필요한 두 가지 질문이 있습니다. 이 질문에 대해 최대의 현상금을 걸고 최선의 답변에 수여 할 것입니다.이 질문은 저와 다른 사람들이 배울 수 있도록 좋은 도움이 필요하기 때문입니다.
1-10,000
. 그들은 그렇게하면서, 전체 인터넷 밖으로 순위가 http://www.google.com
선정 될 수도 #1
, http://www.notasite.com
순위가 될 수 있습니다 #83904803289480
. 내 데이터에서 가능한 최상의 결과를 얻기 위해 Scikit learn에서 이것을 어떻게 정규화합니까?이 방식으로 로지스틱 회귀를 실행하고 있습니다. 나는 이것을 잘못했다고 거의 확신합니다. 웹 사이트 텍스트에서 TF-IDF를 수행 한 다음 다른 두 개의 관련 열을 추가하고 로지스틱 회귀를 맞추려고합니다. 누군가가 내가 LR에서 올바르게 사용하고 싶은 세 개의 열을 사용하고 있는지 신속하게 확인할 수 있다면 감사하겠습니다. 나 자신을 개선 할 수있는 방법에 대한 모든 피드백도 여기에서 감사하겠습니다.
loadData = lambda f: np.genfromtxt(open(f,'r'), delimiter=' ')
print "loading data.."
traindata = list(np.array(p.read_table('train.tsv'))[:,2])#Reading WebsiteText column for TF-IDF.
testdata = list(np.array(p.read_table('test.tsv'))[:,2])
y = np.array(p.read_table('train.tsv'))[:,-1] #reading label
tfv = TfidfVectorizer(min_df=3, max_features=None, strip_accents='unicode', analyzer='word',
token_pattern=r'\w{1,}', ngram_range=(1, 2), use_idf=1, smooth_idf=1,sublinear_tf=1)
rd = lm.LogisticRegression(penalty='l2', dual=True, tol=0.0001, C=1, fit_intercept=True, intercept_scaling=1.0, class_weight=None, random_state=None)
X_all = traindata + testdata
lentrain = len(traindata)
print "fitting pipeline"
tfv.fit(X_all)
print "transforming data"
X_all = tfv.transform(X_all)
X = X_all[:lentrain]
X_test = X_all[lentrain:]
print "20 Fold CV Score: ", np.mean(cross_validation.cross_val_score(rd, X, y, cv=20, scoring='roc_auc'))
#Add Two Integer Columns
AlexaAndGoogleTrainData = list(np.array(p.read_table('train.tsv'))[2:,3])#Not sure if I am doing this correctly. Expecting it to contain AlexaRank and GooglePageRank columns.
AlexaAndGoogleTestData = list(np.array(p.read_table('test.tsv'))[2:,3])
AllAlexaAndGoogleInfo = AlexaAndGoogleTestData + AlexaAndGoogleTrainData
#Add two columns to X.
X = np.append(X, AllAlexaAndGoogleInfo, 1) #Think I have done this incorrectly.
print "training on full data"
rd.fit(X,y)
pred = rd.predict_proba(X_test)[:,1]
testfile = p.read_csv('test.tsv', sep="\t", na_values=['?'], index_col=1)
pred_df = p.DataFrame(pred, index=testfile.index, columns=['label'])
pred_df.to_csv('benchmark.csv')
print "submission file created.."`
모든 의견을 보내 주셔서 감사합니다. 추가 정보가 필요하면 게시 해주세요!
나는 sklearn.preprocessing.StandardScaler
당신이 시도하고 싶은 첫 번째 것입니다. StandardScaler는 모든 기능을 Mean-0-Std-1 기능으로 변환합니다.
AlexaRank
0 주위에 확산되고 경계가 지정됩니다. (예, 같은 거대한 AlexaRank
값 조차도 83904803289480
작은 부동 소수점 숫자로 변환됩니다). 물론 결과는 1
과 사이의 정수가 10000
아니지만 원래 순위와 동일한 순서를 유지합니다. 이 경우 순위를 제한하고 정규화하면 다음과 같이 두 번째 문제를 해결하는 데 도움이됩니다.83904803289480
. 이 경우 Alexa Rank 변수 가LR 적합과 TF-IDF 값의 작은 변화는 LR 적합에 거의 영향을 미치지 않습니다. 이제 계수가 이러한 기능 간의 차이를 설명하기 위해 작거나 큰 값으로 조정할 수 있어야한다고 생각할 수 있습니다. 이 경우는 아닙니다 --- 중요한 변수의 크기뿐만 아니라 범위 도 중요 합니다 . Alexa Rank는 확실히 넓은 범위를 가지고 있으며이 경우 LR 적합을 확실히 지배해야합니다. 따라서 StandardScaler를 사용하여 모든 변수를 정규화하여 범위를 조정하면 적합도가 향상 될 것입니다.다음은 X
행렬의 크기를 조정하는 방법 입니다.
sc = proprocessing.StandardScaler().fit(X)
X = sc.transform(X)
동일한 스케일러를 사용하여 변환하는 것을 잊지 마십시오 X_test
.
X_test = sc.transform(X_test)
이제 피팅 절차 등을 사용할 수 있습니다.
rd.fit(X, y)
re.predict_proba(X_test)
sklearn 전처리에 대한 자세한 내용은 http://scikit-learn.org/stable/modules/preprocessing.html을 확인하십시오.
편집 : pandas를 사용하여 구문 분석 및 열 병합 부분을 쉽게 수행 할 수 있습니다. 즉, 행렬을 목록으로 변환 한 다음 추가 할 필요가 없습니다. 또한 pandas 데이터 프레임은 열 이름으로 직접 인덱싱 할 수 있습니다.
AlexaAndGoogleTrainData = p.read_table('train.tsv', header=0)[["AlexaRank", "GooglePageRank"]]
AlexaAndGoogleTestData = p.read_table('test.tsv', header=0)[["AlexaRank", "GooglePageRank"]]
AllAlexaAndGoogleInfo = AlexaAndGoogleTestData.append(AlexaAndGoogleTrainData)
header=0
tsv 파일의 원래 헤더 이름을 유지하기 위해 read_table에 인수를 전달 하고 있습니다. 또한 전체 열 집합을 사용하여 인덱싱 할 수있는 방법에 유의하십시오. 마지막으로, 당신은 할 수 스택 과 함께이 새로운 매트릭스를 X
사용하여 numpy.hstack
.
X = np.hstack((X, AllAlexaAndGoogleInfo))
hstack
길이가 동일하다면 수평으로 결합 된 2 개의 다차원 배열 형 구조.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다