[반성회] 분류할 때 명목의 척도와 간격의 척도의 개념을 잊어버렸어요. [초보자 있어요?]
12489 단어 기계 학습초보자PythonOneHotEncoder
[기계 학습] 자동차의 성능을 분류해 보다
나는 내가 매우 심각한 잘못을 저질렀다는 것을 발견했다
그것은 명칭 척도(또는 순서 척도)와 간격 척도의 개념이다
나는 대부분의 사람들에게 너무 상식적으로 웃을 것 같지만, 기록으로는
1. 네 가지 척도
통계학에서 변수는 그 성질에 따라 네 가지 척도로 나뉜다.'명의척도','순서척도','간격척도','비례척도'
문자열
설문조사에서 많이 보셨는데(1.힘들다고 생각합니다.2. 그렇게 생각합니다.어느 것도 아닙니다.4. 그렇게 생각하지 않습니다) 이런 순서는 대소관계가 있습니다※ 간격은 의미가 없습니다!!!
눈금은 같은 간격으로 그 간격은 의미가 있다
0은 원점이며 간격과 비율은 의미가 있다
자세한 내용은 참조 1-4. 변수 비율
2. 잣대를 무시하는 종류
어제의 나
3. 문자열 변환
모든 문자열을 숫자로 바꿨습니다.df['class']=df['class'].apply(lambda x:1 if x=='unacc' else(2 if x=='acc' else(3 if x=='good' else 4)))
df['buying']=df['buying'].apply(lambda x:1 if x=='low' else(2 if x=='med' else(3 if x=='high' else 4)))
df['maint']=df['maint'].apply(lambda x:1 if x=='low' else(2 if x=='med' else(3 if x=='high' else 4)))
df['doors'][df['doors']=='5more']=5
df['persons'][df['persons']=='more']=5
df['lug_boot']=df['lug_boot'].apply(lambda x:1 if x=='small' else(2 if x=='med' else 3))
df['safety']=df['safety'].apply(lambda x:1 if x=='low' else(2 if x=='med' else 3))
특징량 id가 필요하지 않기 때문에 삭제 후 출력
index
class
buying
maint
doors
persons
lug_boot
safety
0
일
일
이
삼
이
일
일
일
이
일
삼
삼
오
일
이
이
일
사
삼
오
이
일
이
삼
이
삼
삼
삼
오
삼
이
사
일
삼
삼
삼
이
이
삼
이것은 마치 데이터를 잘 변환한 것 같다. 단지 명칭 척도 문자열을 명칭 척도 숫자로 바꾸면 전혀 의미가 없다
→ 각 클래스는 0, 1의 변수로 변환하여 설명 변수로 사용해야 한다.이것이 바로 소위 위변량이다
3. 가상 변수 OneHotEncoding from sklearn.preprocessing import OneHotEncoder
maint=df['maint'].values.reshape(-1,1)
maint_enc=OneHotEncoder().fit_transform(maint).toarray()
doors=df['doors'].values.reshape(-1,1)
doors_enc=OneHotEncoder().fit_transform(doors).toarray()
persons=df['persons'].values.reshape(-1,1)
persons_enc=OneHotEncoder().fit_transform(persons).toarray()
lug_boot=df['lug_boot'].values.reshape(-1,1)
lug_boot_enc=OneHotEncoder().fit_transform(lug_boot).toarray()
만약 네가 이렇게 한다면, 너는 가상 변수가 될 것이다
만약 네가 그것을 결합한다면, 그것을 뚜렷한 데이터 프레임워크로 만들어라
-
0
일
이
삼
사
오
육
칠
팔
구
...
십일
십이
십삼
십사
십오
십육
십칠
십팔
십구
이십
0
0
일
0
0
0
0
일
0
0
일
...
0
일
0
0
0
0
일
0
일
0
일
0
일
0
0
일
0
0
0
0
일
...
0
0
0
일
0
0
일
0
0
일
이
0
0
0
일
일
0
0
0
0
0
...
일
일
0
0
0
0
일
0
0
일
삼
일
0
0
0
일
0
0
0
0
일
...
0
0
0
일
일
0
0
0
0
일
사
일
0
0
0
일
0
0
0
0
일
...
0
일
0
0
0
일
0
일
0
0
너는 이런 느낌이 들 거야.
차원이 확 늘었다.만약 네가 열 이름을 더욱 잘 설정한다면, 더욱 쉽게 볼 수 있을 것이다
이제 준비됐습니다.
이 데이터를 Stratified-k-Fold로 분류하고 지난번과 같이 분류하여 식별률을 평가합니다
왠지 묘하네.나는 오히려 지난번보다 떨어졌다고 생각한다.
그래서 구글 선생님께 물어봤는데 두 가지 요소가 생각났어요.
4. 위변수를 사용하지 않는 것이 좋다
위조 변수의 제작 방법과 주의점
수치가 크기의 연속성이 있는 경우 가상 변수가 되지 않는 것이 좋다고 한다.
예를 들어 최종 학력 유형이 있다.중학교고등학교전공(고등학교), 4.대학대학원으로 정의된 유형이 있다고 가정해 보세요.수치가 클수록 학력이 높아지기 때문에 일반적으로 연수입은 높아지는 경향이 있다.이런 상황에서 최종 학력 수치의 크기와 연수입은 연관성이 있다.그러나 최종 학력을 가상 변수로 삼으면 독립된 매개 변수가 되기 때문에 최종 학력과 연수입의 연관성은 옅어진다.
이렇게 수치가 크기 연속성이 있는 경우에도 가상 변수가 되지 않는 경우가 있다.
확실히
이번 데이터는 차를 탈 수 있는 사람의 수량(persons)과 차에 있는 문의 수량(doors)이 있는데, 이것에 해당하는 것 같다
그래프로 확인하면 (왠지 그림이 안 붙어) 연관성이 없는 것 같아요.
5. 다중 공통 선형
위조 변수를 사용할 때 변수가 대량으로 증가한다
그리고 0,1로 구분된 양자는 강한 상관관계가 있기 때문에 분석 결과에 좋지 않은 영향을 미칠 수 있다
그래서 일부러 비트를 삭제할 필요가 있어요.
이번에는 가상 변수화된 각 특징량의 시작을 삭제했다
6. 결과
4와 5의 향상을 고려하여 재분류
네.개선됐다고 말할 수는 없어요.
이어 4에 열거된 2개 변수 중 관련 관계가 많이 발견되지 않은doors를 다시 위조 변수로 설정한다
개악
7. 결론
df['class']=df['class'].apply(lambda x:1 if x=='unacc' else(2 if x=='acc' else(3 if x=='good' else 4)))
df['buying']=df['buying'].apply(lambda x:1 if x=='low' else(2 if x=='med' else(3 if x=='high' else 4)))
df['maint']=df['maint'].apply(lambda x:1 if x=='low' else(2 if x=='med' else(3 if x=='high' else 4)))
df['doors'][df['doors']=='5more']=5
df['persons'][df['persons']=='more']=5
df['lug_boot']=df['lug_boot'].apply(lambda x:1 if x=='small' else(2 if x=='med' else 3))
df['safety']=df['safety'].apply(lambda x:1 if x=='low' else(2 if x=='med' else 3))
from sklearn.preprocessing import OneHotEncoder
maint=df['maint'].values.reshape(-1,1)
maint_enc=OneHotEncoder().fit_transform(maint).toarray()
doors=df['doors'].values.reshape(-1,1)
doors_enc=OneHotEncoder().fit_transform(doors).toarray()
persons=df['persons'].values.reshape(-1,1)
persons_enc=OneHotEncoder().fit_transform(persons).toarray()
lug_boot=df['lug_boot'].values.reshape(-1,1)
lug_boot_enc=OneHotEncoder().fit_transform(lug_boot).toarray()
만약 네가 이렇게 한다면, 너는 가상 변수가 될 것이다만약 네가 그것을 결합한다면, 그것을 뚜렷한 데이터 프레임워크로 만들어라
-
0
일
이
삼
사
오
육
칠
팔
구
...
십일
십이
십삼
십사
십오
십육
십칠
십팔
십구
이십
0
0
일
0
0
0
0
일
0
0
일
...
0
일
0
0
0
0
일
0
일
0
일
0
일
0
0
일
0
0
0
0
일
...
0
0
0
일
0
0
일
0
0
일
이
0
0
0
일
일
0
0
0
0
0
...
일
일
0
0
0
0
일
0
0
일
삼
일
0
0
0
일
0
0
0
0
일
...
0
0
0
일
일
0
0
0
0
일
사
일
0
0
0
일
0
0
0
0
일
...
0
일
0
0
0
일
0
일
0
0
너는 이런 느낌이 들 거야.
차원이 확 늘었다.만약 네가 열 이름을 더욱 잘 설정한다면, 더욱 쉽게 볼 수 있을 것이다
이제 준비됐습니다.
이 데이터를 Stratified-k-Fold로 분류하고 지난번과 같이 분류하여 식별률을 평가합니다
왠지 묘하네.나는 오히려 지난번보다 떨어졌다고 생각한다.
그래서 구글 선생님께 물어봤는데 두 가지 요소가 생각났어요.
4. 위변수를 사용하지 않는 것이 좋다
위조 변수의 제작 방법과 주의점
수치가 크기의 연속성이 있는 경우 가상 변수가 되지 않는 것이 좋다고 한다.
예를 들어 최종 학력 유형이 있다.중학교고등학교전공(고등학교), 4.대학대학원으로 정의된 유형이 있다고 가정해 보세요.수치가 클수록 학력이 높아지기 때문에 일반적으로 연수입은 높아지는 경향이 있다.이런 상황에서 최종 학력 수치의 크기와 연수입은 연관성이 있다.그러나 최종 학력을 가상 변수로 삼으면 독립된 매개 변수가 되기 때문에 최종 학력과 연수입의 연관성은 옅어진다.
이렇게 수치가 크기 연속성이 있는 경우에도 가상 변수가 되지 않는 경우가 있다.
확실히
이번 데이터는 차를 탈 수 있는 사람의 수량(persons)과 차에 있는 문의 수량(doors)이 있는데, 이것에 해당하는 것 같다
그래프로 확인하면 (왠지 그림이 안 붙어) 연관성이 없는 것 같아요.
5. 다중 공통 선형
위조 변수를 사용할 때 변수가 대량으로 증가한다
그리고 0,1로 구분된 양자는 강한 상관관계가 있기 때문에 분석 결과에 좋지 않은 영향을 미칠 수 있다
그래서 일부러 비트를 삭제할 필요가 있어요.
이번에는 가상 변수화된 각 특징량의 시작을 삭제했다
6. 결과
4와 5의 향상을 고려하여 재분류
네.개선됐다고 말할 수는 없어요.
이어 4에 열거된 2개 변수 중 관련 관계가 많이 발견되지 않은doors를 다시 위조 변수로 설정한다
개악
7. 결론
위조 변수를 사용할 때 변수가 대량으로 증가한다
그리고 0,1로 구분된 양자는 강한 상관관계가 있기 때문에 분석 결과에 좋지 않은 영향을 미칠 수 있다
그래서 일부러 비트를 삭제할 필요가 있어요.
이번에는 가상 변수화된 각 특징량의 시작을 삭제했다
6. 결과
4와 5의 향상을 고려하여 재분류
네.개선됐다고 말할 수는 없어요.
이어 4에 열거된 2개 변수 중 관련 관계가 많이 발견되지 않은doors를 다시 위조 변수로 설정한다
개악
7. 결론
Reference
이 문제에 관하여([반성회] 분류할 때 명목의 척도와 간격의 척도의 개념을 잊어버렸어요. [초보자 있어요?]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Naoya_Study/items/abeaefccf0b2166caa0b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)