1

데이터 집합이 X (1741, 61) 인 데이터 집합이 있습니다. cross_validation과 함께 로지스틱 회귀 분석을 사용하여 각 분할 (CV = 5)에 대해 62-65 % 가량 증가했습니다.Scikit_learn의 PolynomialForeatures 로지스틱 회귀로 점수가 낮아짐

데이터를 2 차로 만들면 정확도가 증가한다고 생각했습니다. 그러나, 나는 반대 효과를 얻고있다. (나는 cross_validation의 각 분할을 40 %의 비율로 얻는다.) 그래서, 데이터를 2 차적으로 만들려고 할 때 나는 잘못된 것을하고 있다고 생각하고 있는가? 여기

나를 의심하게 내가 사용 코드,

from sklearn import preprocessing 
X_scaled = preprocessing.scale(X) 

from sklearn.preprocessing import PolynomialFeatures 
poly = PolynomialFeatures(3) 
poly_x =poly.fit_transform(X_scaled) 
classifier = LogisticRegression(penalty ='l2', max_iter = 200) 

from sklearn.cross_validation import cross_val_score 
cross_val_score(classifier, poly_x, y, cv=5) 

array([ 0.46418338, 0.4269341 , 0.49425287, 0.58908046, 0.60518732]) 

, 내가 뭔가 잘못하고 있어요.

원시 데이터를 2 차로 변환 한 다음 preprocessing.scale을 사용하여 데이터의 크기를 조정하려고 시도했지만 오류가 발생했습니다.

UserWarning: Numerical issues were encountered when centering the data and might not be solved. Dataset may contain too large values. You may need to prescale your features. warnings.warn("Numerical issues were encountered "

그래서 나는이 길을가는 귀찮게하지 않았다.

또 다른 문제는 이차 계산의 속도입니다. cross_val_score는 다항식 기능을 사용할 때 점수를 출력하는 데 몇 시간 정도 걸립니다. 이 속도를 높이는 방법이 있습니까? 나는 램, 윈도우 7 OS의 16 기가 바이트와 인텔 i5 - 6500 CPU가 있습니다.

감사합니다.

답변

1

Scaler 대신 MinMaxScaler을 사용해 보셨습니까? Scaler은 0 위와 아래에 모두 값을 출력하므로 실제로는 비슷하지는 않지만 스케일 된 값이 -0.1 인 값과 값이 0.1 인 값은 동일한 제곱 값을 갖습니다. 직관적으로 이것은 다항식 적합성의 점수를 낮추는 것으로 보일 것입니다. 그것이 내가 이것을 테스트하지 못했다고 말하면서, 그것은 내 직감 일뿐입니다. 또한 다항식을 사용할 때는주의해야합니다. 나는 this answer to "Why use regularization in polynomial regression instead of lowering the degree?"을 읽는 것이 좋습니다. 훌륭한 설명이며 새로운 기술을 소개 할 것입니다. 제쳐두고 @MatthewDrury는 훌륭한 선생님이며 그의 답변과 블로그 게시물을 모두 읽는 것이 좋습니다.

+0

흥미로운 점이 있습니다. 나는 그것을 테스트하고 당신이 링크 한 블로그를 읽을 것입니다.고맙습니다. – Moondra

+0

PolyMatch로 MinMaxScaler를 처음 사용하면 정확도가 향상됩니다. 약간 시간이 걸릴지 모르지만 나는 그것을 몇 번 더 시험 할 것이다. – Moondra

+0

MinMaxScaler를 사용하면 더 높은 정확도를 얻었지만, 일반적인 스케일링으로 더 높은 정확도를 얻었습니다. – Moondra

1

다항식을 사용하여 "정확도가 증가한다고 가정합니다."라는 진술이 있습니다. 다항식 특징이 모델을 원래의 데이터 생성 프로세스에 더 가깝게 만드는 것은 사실입니다. 다항식 특징, 특히 모든 특징을 상호 작용 및 다항식으로 만드는 것은 데이터 생성 과정에서 모델을 더 멀리 이동할 수 있습니다. 따라서 더 나쁜 결과가 적절할 수 있습니다.

scikit에서 3도 다항식을 사용하면 X 행렬이 행보다 훨씬 많은 열 (1741, 616)에서 (1741, 41664)로 바뀌 었습니다.

41k + 열은 해결하는 데 더 오래 걸립니다. 기능 선택 방법을 살펴야합니다. Grr이 말했듯이 다항식을 낮춰서 조사하십시오. L1, 그룹화 된 올가미, RFE, 베이지안 방법을 시도해보십시오. 중소기업 (다항식 일 수있는 특정 기능을 식별 할 수있는 주제 전문가)을 시도하십시오. 데이터를 플롯하여 다항식에서 어떤 피쳐가 상호 작용할 수 있는지 또는 가장 잘 볼 수 있는지 확인합니다.

잠시 보지 못했지만 계층 적으로 잘 공식화 된 모델 (x1은 제거 할 수 있지만 x1 * x2 상호 작용은 유지할 수 있습니까?)에 대한 토론을 상기합니다. 모델이 잘못 구성된 계층 적 모델로 가장 잘 작동하는지 여부는 조사해 볼 가치가 있습니다.

+0

그래, 아직 기능 선택을하지 않았어. (내가 결국 살펴볼 것이다.) 나는 대부분의 강의에서 편향과 편차가 덜한 것처럼 보였으므로, 다항식 피처의 이점을 측정하려고했습니다. 귀하의 게시물 및 Grr의 게시물을 테스트 할 수있는 많은 것들. 고맙습니다. – Moondra

+0

기능이 (1741, 61)에서 50000으로 변경된 이유를 알 수없는 것 같습니다. (61) * (3) + (61 2 선택) - 각각의 피쳐는 다른 피쳐와 한번 곱한다. – Moondra