오늘은 두 번째 주의 마지막 날이었고, 오전에 git 특강을 듣고 오후에는 머신러닝 실습 위주로 진행해보았다. 먼저 터미널 명령어를 배우고 깃 명령어 조금을 배웠는데 깃은 거의 안해서 다음에 같이 정리를 해야 할 것 같다. 오늘 머신러닝 하면서 좀 막히는 부분, 에러가 많이 났던 것 같다. 다행히 다 해결은 되었다.
1. 터미널의 명령어
ls | 하위 폴더 확인 | cd 폴더이름 | 해당 폴더로 이동 |
ls -al | 현재 위치 숨김 파일 포함하여 보기 | cd .. | 상위 폴더로 이동 |
rm | 삭제 | mkdir 폴더이름 | 폴더 생성 |
rm -r | 폴더 삭제 | touch | 파일생성 |
터미널의 명령어들은 위와 같은데, 이 명령어들을 사용하면 마우스 없이 폴더를 옮겨다니며 삭제, 생성 등 관리가 가능하다.
2. 머신러닝 실습
오늘은 선형회귀에 대한 실습을 진행해보았다. 그냥 실습에 있는 자료로 복붙만 한게 아니라, 타이타닉 데이터셋이나 캐글에서도 데이터셋을 찾아 직접 전처리하고 모델을 적용해보았기 때문에 시간이 조금 걸렸다.
선형회귀 모델의 코드 순서를 보면,
라이브러리 호출 - info, describe를 사용해 정보 확인 - 결측치 제거 및 전처리 - X, y 데이터 지정 - 훈련, 테스트 데이터 분할
- 로지스틱 회귀의 경우 정규화 - 모델 선택, 훈련 및 결과 예측해서 성능 테스트
위와 같이 진행된다.
데이터의 규칙을 찾고 최적의 가중치를 찾으려면 데이터가 숫자 데이터여야 하는데, 숫자 데이터가 아닌 경우 에러가 나게 된다.
이 경우 사용할 수 있는 방법이 매핑 혹은 원핫 인코딩인데, 매핑은 카테고리에 따라 숫자를 입력하는 것이고 원핫 인코딩은 0이나 1만 할당하는 것이다.
예를 들면 나라 이름이 한국, 일본, 중국이 있는데
한국 | 0 |
일본 | 1 |
중국 | 2 |
이렇게 숫자를 매핑하게 되는 것이고 원핫 인코딩은
한국 | 1 | 0 | 0 |
일본 | 0 | 1 | 0 |
중국 | 0 | 0 | 1 |
이와 같이 한 카테고리에만 1이 있고, 나머지는 0으로 채우는 것이다.
지금은 3가지만 있어서 매핑이 0, 1, 2이지만 카테고리가 10가지인 경우에 매핑을 하면 0, 1, 2, 3, ... , 8, 9 가 매핑이 된다. 이 경우에는 서로 연관성이 없고 독립적인 카테고리일지라도 매핑한 숫자 간에 값 차이가 나기 때문에 훈련에 영향을 줄 수 있다.
거의 차이가 없을 수도 있지만, 중요한 독립 변수의 경우 성능이 달라질 수 있기 때문에 주의하도록 하자.
3. unique() 함수에 대해서
오늘 캐글에서 당뇨병에 대한 데이터셋을 다운받아서 로지스틱 회귀 모델을 돌려보았다. 그 과정에서 전처리를 하고 있는데, 분명 코드에 오류가 없고 원핫 인코딩이 잘 됐는데 계속 밑의 사진 에러가 났다.
계속 이 에러가 발생해서 원인을 찾아보았는데, 데이터의 몇몇 행에 - 값이 포함되어 있었고, 성별에는 male, female 말고 other라는 성별도 있었다. 이런 경우에 데이터를 분할 할 때 에러가 나므로, unique() 함수를 사용하면 그 열의 값들을 확인할 수 있다.
이 함수는 아무 경우에나 사용하면 안되고, 값이 몇가지로 특정되어 있는 경우에 사용하면 좋다. 데이터에서 '가격' 열에 unique() 함수를 적용하게 되면, 값이 몇 천, 몇 만 개가 나올 수 있기 때문이다. 따라서 성별이나 연료 타입 같은, 종류가 적은 데이터 열에 적용하면 값을 확인할 수 있다.
실제 코드에 적용한 예시인데, 이처럼 특정 열에 어떤 값이 있는지 보여준다. 오늘 코드 에러가 났던 이유는 Other이라는 성별을 고려하지 않았기 때문이었다.
원핫 인코딩에도 이 함수를 적용하면 좋은데, 성별이 male, female만 있다고 했을 경우에는 원핫 인코딩을 했을 때 열이 두 개만 생기므로 크게 문제가 되지 않는다. 하지만 값이 15~20가지인 열에 원핫 인코딩을 적용한다면, 열이 15~20개가 생겨서 차원이 너무 높아지기 때문이다. 차원의 저주에 걸리게 되면 모델이 복잡해지고 시각화 및 확인이 어렵기 때문에, 되도록이면 10개 미만인 경우에 원핫 인코딩을 해야 하고, unique()로 확인을 먼저 하도록 하자.
앞으로 여러 데이터셋을 다운받아서 머신러닝 모델을 학습시키고 테스트하는데 많은 문제와 에러가 발생할 것이다. 하지만 그럴 때마다, 검색하고 데이터를 뜯어보면서 해결하도록 노력해야겠다.
다음주도 화이팅해야지