Intel AI 캡스톤1 비만 예방을 위한 행동분류예측
비만 예방을 위한 분석 AI모델 구축
- 비만 예방을 위해 비만에 걱정하시는 분들을 위한 AI솔루션
- 어떻게 예방할지 AI를 통해 적기에 사람들에게 솔루션 제공이 중요.
- 백문이 불여일견 진행시작
진행 순서
-
.csv 파일 읽어오기 (test.csv, train.csv): df_test / df_train
-
Data 크기 확인하기(test, train)
-
Data SET 첫 5행 확인하기(test, train)
-
Data SET 통계값, Null 값 확인하기 (null 값이 있는 경우 행 삭제)
-
“activity” 컬럼의 Unique 값, Unique count 값 확인 하기
-
“activity” 컬럼의 Unique count 값 그래프 그리기
-
rn 열 drop (df_test / df_train)
-
“activity” 컬럼에 대하여 인코딩 하기
-
df_train 으로 X = “특성 컬럼”, y = “activity” 만들기
-
X_train, X_test, y_train, y_test 만들기
-
X_train, X_test 정규화 하기(옵션)
-
AI Model : 분류
-
.fit // .predict // score (정확도, 정밀도, 재현율, F1 Score)
-
df_test 에 대한 분류 하여 “activity” 컬럼 작성하여 test_result.csv 파일 만들기 (6가지 클래스로만…)
<’df_test’의 경우 정답 없는 문제지라 AI에게 테스트로 predict로 던져보는… 디코딩해서 만든게 test_result.csv>
- 결과 보고
0. 필요한 라이브러리..
-
두말할 거 없이 이번 캡스톤1에 필요한 라이브러리를 가져오는건 기본.
-
여기서 KNN, GNB, MNB, LR, RFC 그 외 XGBoost 등등 들어본 머신러닝들을 활용.
이웃, 네이브베어, 선형모델, 앙상블 랜덤포레스트분류 등
# 기본적인 부분 우선...
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
# 훈련 및 필요한 여러모로의 모델들
from sklearn.model_selection import train_test_split # 분리
from sklearn.preprocessing import StandardScaler # 정규화.
from sklearn.metrics import classification_report # 성능 요약
from sklearn import tree # Decision Tree
from sklearn import svm # support vector machine
from sklearn.neighbors import KNeighborsClassifier # KNN
from sklearn.naive_bayes import GaussianNB # GNB
from sklearn.naive_bayes import MultinomialNB # MNB
from sklearn.linear_model import LogisticRegression # LR..
from sklearn.ensemble import RandomForestClassifier # RFC
from xgboost import XGBClassifier # Xgboost
1. .csv 파일 읽어오기
| rn | activity | tBodyAcc.mean.X | tBodyAcc.mean.Y | tBodyAcc.mean.Z | tBodyAcc.std.X | tBodyAcc.std.Y | tBodyAcc.std.Z | tBodyAcc.mad.X | tBodyAcc.mad.Y | ... | fBodyBodyGyroJerkMag.meanFreq | fBodyBodyGyroJerkMag.skewness | fBodyBodyGyroJerkMag.kurtosis | angle.tBodyAccMean.gravity | angle.tBodyAccJerkMean.gravityMean | angle.tBodyGyroMean.gravityMean | angle.tBodyGyroJerkMean.gravityMean | angle.X.gravityMean | angle.Y.gravityMean | angle.Z.gravityMean | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 7 | STANDING | 0.279 | -0.0196 | -0.1100 | -0.997 | -0.967 | -0.983 | -0.997 | -0.966 | ... | 0.146 | -0.217 | -0.5640 | -0.2130 | -0.2310 | 0.0146 | -0.190 | -0.852 | 0.182 | -0.0430 |
| 1 | 11 | STANDING | 0.277 | -0.0127 | -0.1030 | -0.995 | -0.973 | -0.985 | -0.996 | -0.974 | ... | 0.121 | 0.349 | 0.0577 | 0.0807 | 0.5960 | -0.4760 | 0.116 | -0.852 | 0.188 | -0.0347 |
| 2 | 14 | STANDING | 0.277 | -0.0147 | -0.1070 | -0.999 | -0.991 | -0.993 | -0.999 | -0.991 | ... | 0.740 | -0.564 | -0.7660 | 0.1060 | -0.0903 | -0.1320 | 0.499 | -0.850 | 0.189 | -0.0351 |
| 3 | 15 | STANDING | 0.298 | 0.0271 | -0.0617 | -0.989 | -0.817 | -0.902 | -0.989 | -0.794 | ... | 0.131 | 0.208 | -0.0681 | 0.0623 | -0.0587 | 0.0312 | -0.269 | -0.731 | 0.283 | 0.0364 |
| 4 | 20 | STANDING | 0.276 | -0.0170 | -0.1110 | -0.998 | -0.991 | -0.998 | -0.998 | -0.989 | ... | 0.667 | -0.942 | -0.9660 | 0.2450 | 0.1030 | 0.0661 | -0.412 | -0.761 | 0.263 | 0.0296 |
5 rows × 563 columns
Index(['rn', 'activity', 'tBodyAcc.mean.X', 'tBodyAcc.mean.Y',
'tBodyAcc.mean.Z', 'tBodyAcc.std.X', 'tBodyAcc.std.Y', 'tBodyAcc.std.Z',
'tBodyAcc.mad.X', 'tBodyAcc.mad.Y',
...
'fBodyBodyGyroJerkMag.meanFreq', 'fBodyBodyGyroJerkMag.skewness',
'fBodyBodyGyroJerkMag.kurtosis', 'angle.tBodyAccMean.gravity',
'angle.tBodyAccJerkMean.gravityMean', 'angle.tBodyGyroMean.gravityMean',
'angle.tBodyGyroJerkMean.gravityMean', 'angle.X.gravityMean',
'angle.Y.gravityMean', 'angle.Z.gravityMean'],
dtype='object', length=563)
방금 진행한 작업은 위 head데이터에서 어떠한 목록들이 있는가 한번 확인해 보기 위해 넣어본 것.
<bound method DataFrame.info of rn activity tBodyAcc.mean.X tBodyAcc.mean.Y \ 0 7 STANDING 0.279 -0.01960 1 11 STANDING 0.277 -0.01270 2 14 STANDING 0.277 -0.01470 3 15 STANDING 0.298 0.02710 4 20 STANDING 0.276 -0.01700 ... ... ... ... ... 3604 10277 WALKING_UPSTAIRS 0.357 -0.04460 3605 10278 WALKING_UPSTAIRS 0.344 0.00479 3606 10279 WALKING_UPSTAIRS 0.284 -0.00796 3607 10280 WALKING_UPSTAIRS 0.207 0.02460 3608 10281 WALKING_DOWNSTAIRS 0.393 -0.01780 ...... [3609 rows x 563 columns]>
test도 동일하게 진행.
| rn | tBodyAcc.mean.X | tBodyAcc.mean.Y | tBodyAcc.mean.Z | tBodyAcc.std.X | tBodyAcc.std.Y | tBodyAcc.std.Z | tBodyAcc.mad.X | tBodyAcc.mad.Y | tBodyAcc.mad.Z | ... | fBodyBodyGyroJerkMag.meanFreq | fBodyBodyGyroJerkMag.skewness | fBodyBodyGyroJerkMag.kurtosis | angle.tBodyAccMean.gravity | angle.tBodyAccJerkMean.gravityMean | angle.tBodyGyroMean.gravityMean | angle.tBodyGyroJerkMean.gravityMean | angle.X.gravityMean | angle.Y.gravityMean | angle.Z.gravityMean | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 3 | 0.280 | -0.0195 | -0.113 | -0.995 | -0.967 | -0.979 | -0.997 | -0.964 | -0.977 | ... | 0.4150 | -0.391 | -0.760 | -0.11900 | 0.1780 | 0.101 | 0.809 | -0.849 | 0.181 | -0.0491 |
| 1 | 5 | 0.277 | -0.0166 | -0.115 | -0.998 | -0.981 | -0.990 | -0.998 | -0.980 | -0.990 | ... | 0.0878 | -0.351 | -0.699 | 0.12300 | 0.1230 | 0.694 | -0.616 | -0.848 | 0.185 | -0.0439 |
| 2 | 9 | 0.277 | -0.0218 | -0.121 | -0.997 | -0.961 | -0.984 | -0.998 | -0.957 | -0.984 | ... | 0.3140 | -0.269 | -0.573 | 0.01300 | 0.0809 | -0.234 | 0.118 | -0.848 | 0.189 | -0.0374 |
| 3 | 17 | 0.279 | -0.0148 | -0.117 | -0.997 | -0.982 | -0.983 | -0.997 | -0.982 | -0.981 | ... | 0.5610 | -0.779 | -0.940 | -0.00145 | -0.0481 | -0.340 | -0.229 | -0.759 | 0.264 | 0.0270 |
| 4 | 26 | 0.279 | -0.0145 | -0.107 | -0.998 | -0.986 | -0.993 | -0.998 | -0.985 | -0.995 | ... | 0.6770 | -0.715 | -0.937 | 0.02570 | 0.0665 | -0.226 | -0.225 | -0.762 | 0.262 | 0.0294 |
5 rows × 562 columns
Index(['rn', 'tBodyAcc.mean.X', 'tBodyAcc.mean.Y', 'tBodyAcc.mean.Z',
'tBodyAcc.std.X', 'tBodyAcc.std.Y', 'tBodyAcc.std.Z', 'tBodyAcc.mad.X',
'tBodyAcc.mad.Y', 'tBodyAcc.mad.Z',
...
'fBodyBodyGyroJerkMag.meanFreq', 'fBodyBodyGyroJerkMag.skewness',
'fBodyBodyGyroJerkMag.kurtosis', 'angle.tBodyAccMean.gravity',
'angle.tBodyAccJerkMean.gravityMean', 'angle.tBodyGyroMean.gravityMean',
'angle.tBodyGyroJerkMean.gravityMean', 'angle.X.gravityMean',
'angle.Y.gravityMean', 'angle.Z.gravityMean'],
dtype='object', length=562)
<bound method DataFrame.info of rn tBodyAcc.mean.X tBodyAcc.mean.Y tBodyAcc.mean.Z \ 0 3 0.280 -0.01950 -0.1130 1 5 0.277 -0.01660 -0.1150 2 9 0.277 -0.02180 -0.1210 3 17 0.279 -0.01480 -0.1170 4 26 0.279 -0.01450 -0.1070 ... ... ... ... ... 1536 10255 0.289 -0.02810 -0.0943 1537 10270 0.377 -0.01810 -0.1100 1538 10272 0.253 -0.02490 -0.1700 1539 10289 0.277 0.00108 -0.0740 1540 10294 0.192 -0.03360 -0.1060 ...... [1541 rows x 562 columns]>
2. Data 크기 확인하기
-
대략 적인 크기 및 정보는 위에 info등을 통해 나와버렸으나 자세한 부분을 여기 담음
-
세부적인 그래프 비교는 추후에..
| rn | tBodyAcc.mean.X | tBodyAcc.mean.Y | tBodyAcc.mean.Z | tBodyAcc.std.X | tBodyAcc.std.Y | tBodyAcc.std.Z | tBodyAcc.mad.X | tBodyAcc.mad.Y | tBodyAcc.mad.Z | ... | fBodyBodyGyroJerkMag.meanFreq | fBodyBodyGyroJerkMag.skewness | fBodyBodyGyroJerkMag.kurtosis | angle.tBodyAccMean.gravity | angle.tBodyAccJerkMean.gravityMean | angle.tBodyGyroMean.gravityMean | angle.tBodyGyroJerkMean.gravityMean | angle.X.gravityMean | angle.Y.gravityMean | angle.Z.gravityMean | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | ... | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 | 3609.000000 |
| mean | 5152.430590 | 0.274544 | -0.017415 | -0.109195 | -0.608457 | -0.506265 | -0.614482 | -0.634634 | -0.521660 | -0.616047 | ... | 0.128804 | -0.300815 | -0.619400 | 0.007561 | 0.009484 | 0.029185 | -0.010632 | -0.496977 | 0.060040 | -0.050202 |
| std | 2975.767839 | 0.063589 | 0.042589 | 0.056218 | 0.439157 | 0.501627 | 0.399514 | 0.413194 | 0.485282 | 0.394932 | ... | 0.240278 | 0.317963 | 0.308303 | 0.332249 | 0.448971 | 0.613615 | 0.490830 | 0.509336 | 0.311308 | 0.263935 |
| min | 7.000000 | -0.521000 | -1.000000 | -0.926000 | -1.000000 | -0.999000 | -1.000000 | -1.000000 | -0.999000 | -1.000000 | ... | -0.786000 | -0.968000 | -0.995000 | -0.969000 | -0.997000 | -1.000000 | -0.993000 | -0.999000 | -1.000000 | -0.971000 |
| 25% | 2570.000000 | 0.262000 | -0.025200 | -0.122000 | -0.992000 | -0.976000 | -0.979000 | -0.993000 | -0.976000 | -0.978000 | ... | -0.015800 | -0.533000 | -0.836000 | -0.118000 | -0.281000 | -0.478000 | -0.398000 | -0.816000 | -0.015600 | -0.122000 |
| 50% | 5158.000000 | 0.277000 | -0.017200 | -0.109000 | -0.939000 | -0.812000 | -0.844000 | -0.946000 | -0.816000 | -0.837000 | ... | 0.132000 | -0.341000 | -0.706000 | 0.007740 | 0.009830 | 0.029600 | -0.013400 | -0.716000 | 0.183000 | -0.005260 |
| 75% | 7727.000000 | 0.287000 | -0.011000 | -0.098000 | -0.254000 | -0.051700 | -0.283000 | -0.306000 | -0.084500 | -0.288000 | ... | 0.290000 | -0.118000 | -0.501000 | 0.142000 | 0.309000 | 0.554000 | 0.374000 | -0.522000 | 0.252000 | 0.104000 |
| max | 10281.000000 | 0.693000 | 1.000000 | 1.000000 | 1.000000 | 0.980000 | 1.000000 | 1.000000 | 0.988000 | 1.000000 | ... | 0.871000 | 0.990000 | 0.957000 | 0.981000 | 0.997000 | 0.999000 | 0.996000 | 0.977000 | 1.000000 | 0.998000 |
8 rows × 562 columns
- 열 확인
rn int64
activity object
tBodyAcc.mean.X float64
tBodyAcc.mean.Y float64
tBodyAcc.mean.Z float64
...
angle.tBodyGyroMean.gravityMean float64
angle.tBodyGyroJerkMean.gravityMean float64
angle.X.gravityMean float64
angle.Y.gravityMean float64
angle.Z.gravityMean float64
Length: 563, dtype: object
- 유니크 개수 확인
rn 3609
activity 6
tBodyAcc.mean.X 375
tBodyAcc.mean.Y 1243
tBodyAcc.mean.Z 689
...
angle.tBodyGyroMean.gravityMean 1843
angle.tBodyGyroJerkMean.gravityMean 1847
angle.X.gravityMean 940
angle.Y.gravityMean 1172
angle.Z.gravityMean 1892
Length: 563, dtype: int64
- 요약.
| rn | tBodyAcc.mean.X | tBodyAcc.mean.Y | tBodyAcc.mean.Z | tBodyAcc.std.X | tBodyAcc.std.Y | tBodyAcc.std.Z | tBodyAcc.mad.X | tBodyAcc.mad.Y | tBodyAcc.mad.Z | ... | fBodyBodyGyroJerkMag.meanFreq | fBodyBodyGyroJerkMag.skewness | fBodyBodyGyroJerkMag.kurtosis | angle.tBodyAccMean.gravity | angle.tBodyAccJerkMean.gravityMean | angle.tBodyGyroMean.gravityMean | angle.tBodyGyroJerkMean.gravityMean | angle.X.gravityMean | angle.Y.gravityMean | angle.Z.gravityMean | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 1541.000000 | 1541.00000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | ... | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 | 1541.000000 |
| mean | 5161.052563 | 0.27582 | -0.018046 | -0.109217 | -0.607266 | -0.516822 | -0.617703 | -0.632406 | -0.532077 | -0.619526 | ... | 0.132199 | -0.316954 | -0.634735 | 0.008390 | 0.014311 | -0.000550 | 0.006301 | -0.493145 | 0.061068 | -0.054510 |
| std | 3018.400705 | 0.06066 | 0.024662 | 0.046271 | 0.440922 | 0.499209 | 0.400243 | 0.416450 | 0.483753 | 0.396243 | ... | 0.246591 | 0.313443 | 0.297231 | 0.338114 | 0.450936 | 0.621036 | 0.482773 | 0.511159 | 0.303507 | 0.270579 |
| min | 3.000000 | -0.41000 | -0.268000 | -0.347000 | -0.999000 | -1.000000 | -0.999000 | -0.999000 | -1.000000 | -1.000000 | ... | -0.786000 | -1.000000 | -0.993000 | -1.000000 | -1.000000 | -0.999000 | -0.991000 | -0.997000 | -0.987000 | -0.971000 |
| 25% | 2504.000000 | 0.26300 | -0.024800 | -0.121000 | -0.992000 | -0.978000 | -0.980000 | -0.993000 | -0.979000 | -0.979000 | ... | -0.014900 | -0.551000 | -0.848000 | -0.129000 | -0.279000 | -0.526000 | -0.370000 | -0.814000 | -0.018400 | -0.136000 |
| 50% | 5064.000000 | 0.27700 | -0.017200 | -0.109000 | -0.945000 | -0.865000 | -0.862000 | -0.951000 | -0.869000 | -0.857000 | ... | 0.141000 | -0.353000 | -0.718000 | 0.011900 | 0.027500 | -0.004190 | 0.001220 | -0.723000 | 0.183000 | -0.002240 |
| 75% | 7888.000000 | 0.28900 | -0.010400 | -0.098300 | -0.239000 | -0.062700 | -0.273000 | -0.290000 | -0.082100 | -0.287000 | ... | 0.293000 | -0.140000 | -0.523000 | 0.148000 | 0.301000 | 0.527000 | 0.377000 | -0.512000 | 0.249000 | 0.103000 |
| max | 10294.000000 | 0.56400 | 0.153000 | 0.719000 | 0.718000 | 1.000000 | 0.753000 | 0.722000 | 1.000000 | 0.728000 | ... | 0.947000 | 0.941000 | 0.927000 | 1.000000 | 1.000000 | 0.993000 | 0.991000 | 0.912000 | 0.901000 | 0.991000 |
8 rows × 562 columns
- 타입 체크.
rn int64
tBodyAcc.mean.X float64
tBodyAcc.mean.Y float64
tBodyAcc.mean.Z float64
tBodyAcc.std.X float64
...
angle.tBodyGyroMean.gravityMean float64
angle.tBodyGyroJerkMean.gravityMean float64
angle.X.gravityMean float64
angle.Y.gravityMean float64
angle.Z.gravityMean float64
Length: 562, dtype: object
- 유니크 개수 확인
rn 1541
tBodyAcc.mean.X 288
tBodyAcc.mean.Y 729
tBodyAcc.mean.Z 417
tBodyAcc.std.X 593
...
angle.tBodyGyroMean.gravityMean 1091
angle.tBodyGyroJerkMean.gravityMean 1097
angle.X.gravityMean 683
angle.Y.gravityMean 725
angle.Z.gravityMean 1084
Length: 562, dtype: int64
3. Data SET 첫 5행 확인하기(test, train)
- 이미 위에 확인했기에 패스
4. Data SET 통계값, Null 값 확인하기 (null 값이 있는 경우 행 삭제)
-
통계값 확인은 위 데이터를 근거로 괜찮을 것이라 생각.
-
null값 확인은 해보아야..
-
null값 확인 결과
rn 0
activity 0
tBodyAcc.mean.X 0
tBodyAcc.mean.Y 0
tBodyAcc.mean.Z 0
..
angle.tBodyGyroMean.gravityMean 0
angle.tBodyGyroJerkMean.gravityMean 0
angle.X.gravityMean 0
angle.Y.gravityMean 0
angle.Z.gravityMean 0
Length: 563, dtype: int64
- test값도 확인
rn 0
tBodyAcc.mean.X 0
tBodyAcc.mean.Y 0
tBodyAcc.mean.Z 0
tBodyAcc.std.X 0
..
angle.tBodyGyroMean.gravityMean 0
angle.tBodyGyroJerkMean.gravityMean 0
angle.X.gravityMean 0
angle.Y.gravityMean 0
angle.Z.gravityMean 0
Length: 562, dtype: int64
5. “activity” 컬럼의 Unique 값, Unique count 값 확인 하기
-
전체적인 대상의 활동 데이터를 보고 앞으로 어떻게 행동할지 예측 및 조언할 데이터가 activity
-
여기서 정보 확인은 중요..
array(['STANDING', 'SITTING', 'LAYING', 'WALKING', 'WALKING_DOWNSTAIRS',
'WALKING_UPSTAIRS'], dtype=object)
- 유니크 개수 확인
6
- 왜 강사님께서 6클래스 진행하면 된다고 하는지 위 데이터 답지들을 보고 이해.
6. “activity” 컬럼의 Unique count 값 그래프 그리기
-
어떤 차트가 나은지 고찰은 진행해봐야..
- 일단 진행.
- solution에 관한 차트 비교도 진행.
LAYING 681 STANDING 668 SITTING 623 WALKING 603 WALKING_UPSTAIRS 541 WALKING_DOWNSTAIRS 493 Name: activity, dtype: int64
- 꺾은선 그래프 등은 추후에 여유되면.
7. rn 열 drop (df_test / df_train)
-
rn열은 대상의 유니크번호이겠으나 분석등 판단에는 필요없어보이기에 삭제.
-
아래 2표는 기존 데이터와 삭제된 열 데이터로 구분
| rn | activity | tBodyAcc.mean.X | tBodyAcc.mean.Y | tBodyAcc.mean.Z | tBodyAcc.std.X | tBodyAcc.std.Y | tBodyAcc.std.Z | tBodyAcc.mad.X | tBodyAcc.mad.Y | ... | fBodyBodyGyroJerkMag.meanFreq | fBodyBodyGyroJerkMag.skewness | fBodyBodyGyroJerkMag.kurtosis | angle.tBodyAccMean.gravity | angle.tBodyAccJerkMean.gravityMean | angle.tBodyGyroMean.gravityMean | angle.tBodyGyroJerkMean.gravityMean | angle.X.gravityMean | angle.Y.gravityMean | angle.Z.gravityMean | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 7 | STANDING | 0.279 | -0.01960 | -0.1100 | -0.9970 | -0.9670 | -0.983 | -0.997 | -0.9660 | ... | 0.1460 | -0.2170 | -0.5640 | -0.2130 | -0.2310 | 0.0146 | -0.1900 | -0.852 | 0.182 | -0.0430 |
| 1 | 11 | STANDING | 0.277 | -0.01270 | -0.1030 | -0.9950 | -0.9730 | -0.985 | -0.996 | -0.9740 | ... | 0.1210 | 0.3490 | 0.0577 | 0.0807 | 0.5960 | -0.4760 | 0.1160 | -0.852 | 0.188 | -0.0347 |
| 2 | 14 | STANDING | 0.277 | -0.01470 | -0.1070 | -0.9990 | -0.9910 | -0.993 | -0.999 | -0.9910 | ... | 0.7400 | -0.5640 | -0.7660 | 0.1060 | -0.0903 | -0.1320 | 0.4990 | -0.850 | 0.189 | -0.0351 |
| 3 | 15 | STANDING | 0.298 | 0.02710 | -0.0617 | -0.9890 | -0.8170 | -0.902 | -0.989 | -0.7940 | ... | 0.1310 | 0.2080 | -0.0681 | 0.0623 | -0.0587 | 0.0312 | -0.2690 | -0.731 | 0.283 | 0.0364 |
| 4 | 20 | STANDING | 0.276 | -0.01700 | -0.1110 | -0.9980 | -0.9910 | -0.998 | -0.998 | -0.9890 | ... | 0.6670 | -0.9420 | -0.9660 | 0.2450 | 0.1030 | 0.0661 | -0.4120 | -0.761 | 0.263 | 0.0296 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 3604 | 10277 | WALKING_UPSTAIRS | 0.357 | -0.04460 | -0.1300 | -0.3140 | -0.0556 | -0.173 | -0.386 | -0.0575 | ... | 0.0168 | -0.1630 | -0.5930 | -0.7110 | -0.0612 | -0.7060 | 0.0646 | -0.660 | 0.274 | 0.1760 |
| 3605 | 10278 | WALKING_UPSTAIRS | 0.344 | 0.00479 | -0.1220 | -0.3200 | -0.0667 | -0.182 | -0.380 | -0.0710 | ... | -0.0292 | 0.1810 | -0.2500 | -0.4030 | -0.7060 | 0.7390 | 0.8710 | -0.653 | 0.278 | 0.1800 |
| 3606 | 10279 | WALKING_UPSTAIRS | 0.284 | -0.00796 | -0.1190 | -0.3090 | -0.0804 | -0.211 | -0.369 | -0.0971 | ... | -0.1100 | 0.0245 | -0.3930 | -0.0761 | -0.2390 | 0.9600 | 0.0866 | -0.657 | 0.272 | 0.1830 |
| 3607 | 10280 | WALKING_UPSTAIRS | 0.207 | 0.02460 | -0.1040 | -0.3650 | -0.1690 | -0.216 | -0.449 | -0.1860 | ... | -0.2140 | -0.3520 | -0.7340 | 0.5350 | -0.2570 | 0.9270 | -0.0843 | -0.657 | 0.267 | 0.1880 |
| 3608 | 10281 | WALKING_DOWNSTAIRS | 0.393 | -0.01780 | -0.0902 | -0.0963 | -0.1740 | -0.257 | -0.153 | -0.2080 | ... | 0.0894 | 0.2740 | -0.0368 | -0.7430 | -0.0802 | 0.9270 | -0.6520 | -0.807 | 0.190 | 0.1180 |
3609 rows × 563 columns
| activity | tBodyAcc.mean.X | tBodyAcc.mean.Y | tBodyAcc.mean.Z | tBodyAcc.std.X | tBodyAcc.std.Y | tBodyAcc.std.Z | tBodyAcc.mad.X | tBodyAcc.mad.Y | tBodyAcc.mad.Z | ... | fBodyBodyGyroJerkMag.meanFreq | fBodyBodyGyroJerkMag.skewness | fBodyBodyGyroJerkMag.kurtosis | angle.tBodyAccMean.gravity | angle.tBodyAccJerkMean.gravityMean | angle.tBodyGyroMean.gravityMean | angle.tBodyGyroJerkMean.gravityMean | angle.X.gravityMean | angle.Y.gravityMean | angle.Z.gravityMean | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | STANDING | 0.279 | -0.01960 | -0.1100 | -0.9970 | -0.9670 | -0.983 | -0.997 | -0.9660 | -0.983 | ... | 0.1460 | -0.2170 | -0.5640 | -0.2130 | -0.2310 | 0.0146 | -0.1900 | -0.852 | 0.182 | -0.0430 |
| 1 | STANDING | 0.277 | -0.01270 | -0.1030 | -0.9950 | -0.9730 | -0.985 | -0.996 | -0.9740 | -0.985 | ... | 0.1210 | 0.3490 | 0.0577 | 0.0807 | 0.5960 | -0.4760 | 0.1160 | -0.852 | 0.188 | -0.0347 |
| 2 | STANDING | 0.277 | -0.01470 | -0.1070 | -0.9990 | -0.9910 | -0.993 | -0.999 | -0.9910 | -0.992 | ... | 0.7400 | -0.5640 | -0.7660 | 0.1060 | -0.0903 | -0.1320 | 0.4990 | -0.850 | 0.189 | -0.0351 |
| 3 | STANDING | 0.298 | 0.02710 | -0.0617 | -0.9890 | -0.8170 | -0.902 | -0.989 | -0.7940 | -0.888 | ... | 0.1310 | 0.2080 | -0.0681 | 0.0623 | -0.0587 | 0.0312 | -0.2690 | -0.731 | 0.283 | 0.0364 |
| 4 | STANDING | 0.276 | -0.01700 | -0.1110 | -0.9980 | -0.9910 | -0.998 | -0.998 | -0.9890 | -0.997 | ... | 0.6670 | -0.9420 | -0.9660 | 0.2450 | 0.1030 | 0.0661 | -0.4120 | -0.761 | 0.263 | 0.0296 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 3604 | WALKING_UPSTAIRS | 0.357 | -0.04460 | -0.1300 | -0.3140 | -0.0556 | -0.173 | -0.386 | -0.0575 | -0.217 | ... | 0.0168 | -0.1630 | -0.5930 | -0.7110 | -0.0612 | -0.7060 | 0.0646 | -0.660 | 0.274 | 0.1760 |
| 3605 | WALKING_UPSTAIRS | 0.344 | 0.00479 | -0.1220 | -0.3200 | -0.0667 | -0.182 | -0.380 | -0.0710 | -0.245 | ... | -0.0292 | 0.1810 | -0.2500 | -0.4030 | -0.7060 | 0.7390 | 0.8710 | -0.653 | 0.278 | 0.1800 |
| 3606 | WALKING_UPSTAIRS | 0.284 | -0.00796 | -0.1190 | -0.3090 | -0.0804 | -0.211 | -0.369 | -0.0971 | -0.301 | ... | -0.1100 | 0.0245 | -0.3930 | -0.0761 | -0.2390 | 0.9600 | 0.0866 | -0.657 | 0.272 | 0.1830 |
| 3607 | WALKING_UPSTAIRS | 0.207 | 0.02460 | -0.1040 | -0.3650 | -0.1690 | -0.216 | -0.449 | -0.1860 | -0.326 | ... | -0.2140 | -0.3520 | -0.7340 | 0.5350 | -0.2570 | 0.9270 | -0.0843 | -0.657 | 0.267 | 0.1880 |
| 3608 | WALKING_DOWNSTAIRS | 0.393 | -0.01780 | -0.0902 | -0.0963 | -0.1740 | -0.257 | -0.153 | -0.2080 | -0.265 | ... | 0.0894 | 0.2740 | -0.0368 | -0.7430 | -0.0802 | 0.9270 | -0.6520 | -0.807 | 0.190 | 0.1180 |
3609 rows × 562 columns
rn열 삭제, test도 진행
| tBodyAcc.mean.X | tBodyAcc.mean.Y | tBodyAcc.mean.Z | tBodyAcc.std.X | tBodyAcc.std.Y | tBodyAcc.std.Z | tBodyAcc.mad.X | tBodyAcc.mad.Y | tBodyAcc.mad.Z | tBodyAcc.max.X | ... | fBodyBodyGyroJerkMag.meanFreq | fBodyBodyGyroJerkMag.skewness | fBodyBodyGyroJerkMag.kurtosis | angle.tBodyAccMean.gravity | angle.tBodyAccJerkMean.gravityMean | angle.tBodyGyroMean.gravityMean | angle.tBodyGyroJerkMean.gravityMean | angle.X.gravityMean | angle.Y.gravityMean | angle.Z.gravityMean | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.280 | -0.01950 | -0.1130 | -0.9950 | -0.9670 | -0.979 | -0.997 | -0.9640 | -0.977 | -0.9390 | ... | 0.4150 | -0.391 | -0.760 | -0.11900 | 0.1780 | 0.101 | 0.809 | -0.849 | 0.181 | -0.0491 |
| 1 | 0.277 | -0.01660 | -0.1150 | -0.9980 | -0.9810 | -0.990 | -0.998 | -0.9800 | -0.990 | -0.9420 | ... | 0.0878 | -0.351 | -0.699 | 0.12300 | 0.1230 | 0.694 | -0.616 | -0.848 | 0.185 | -0.0439 |
| 2 | 0.277 | -0.02180 | -0.1210 | -0.9970 | -0.9610 | -0.984 | -0.998 | -0.9570 | -0.984 | -0.9410 | ... | 0.3140 | -0.269 | -0.573 | 0.01300 | 0.0809 | -0.234 | 0.118 | -0.848 | 0.189 | -0.0374 |
| 3 | 0.279 | -0.01480 | -0.1170 | -0.9970 | -0.9820 | -0.983 | -0.997 | -0.9820 | -0.981 | -0.9420 | ... | 0.5610 | -0.779 | -0.940 | -0.00145 | -0.0481 | -0.340 | -0.229 | -0.759 | 0.264 | 0.0270 |
| 4 | 0.279 | -0.01450 | -0.1070 | -0.9980 | -0.9860 | -0.993 | -0.998 | -0.9850 | -0.995 | -0.9430 | ... | 0.6770 | -0.715 | -0.937 | 0.02570 | 0.0665 | -0.226 | -0.225 | -0.762 | 0.262 | 0.0294 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 1536 | 0.289 | -0.02810 | -0.0943 | -0.0623 | 0.1140 | -0.190 | -0.114 | 0.0393 | -0.207 | 0.3300 | ... | 0.2860 | -0.237 | -0.607 | -0.19600 | 0.6980 | 0.990 | -0.108 | -0.806 | 0.190 | 0.1200 |
| 1537 | 0.377 | -0.01810 | -0.1100 | -0.3140 | -0.1520 | -0.214 | -0.394 | -0.1810 | -0.266 | -0.0726 | ... | -0.1910 | -0.323 | -0.753 | -0.82900 | 0.0483 | 0.913 | -0.904 | -0.695 | 0.246 | 0.1730 |
| 1538 | 0.253 | -0.02490 | -0.1700 | -0.3080 | -0.1890 | -0.141 | -0.377 | -0.2260 | -0.221 | 0.0920 | ... | -0.1780 | -0.142 | -0.564 | 0.00451 | 0.3570 | -0.946 | 0.614 | -0.695 | 0.259 | 0.1580 |
| 1539 | 0.277 | 0.00108 | -0.0740 | -0.0685 | -0.2450 | -0.145 | -0.149 | -0.3030 | -0.199 | 0.4030 | ... | -0.1040 | 0.161 | -0.126 | 0.13400 | 0.8830 | -0.994 | 0.475 | -0.804 | 0.197 | 0.1140 |
| 1540 | 0.192 | -0.03360 | -0.1060 | -0.3550 | -0.0925 | -0.313 | -0.434 | -0.0887 | -0.336 | -0.0416 | ... | 0.1590 | -0.630 | -0.916 | 0.53600 | 0.6890 | -0.937 | 0.562 | -0.647 | 0.282 | 0.1810 |
1541 rows × 561 columns
8. “activity” 컬럼에 대하여 인코딩 하기
-
문자열로 구분하는데 여러모로 비용 및 한계가 있기에 이와 같이 숫자 구분으로 인코딩 필수
-
0: …, 1:… 등으로 인코딩됨
array(['STANDING', 'SITTING', 'LAYING', 'WALKING', 'WALKING_DOWNSTAIRS',
'WALKING_UPSTAIRS'], dtype=object)
위 unique 라벨을 바탕으로 라벨링 진행
LAYING 681 STANDING 668 SITTING 623 WALKING 603 WALKING_UPSTAIRS 541 WALKING_DOWNSTAIRS 493 Name: activity, dtype: int64 1 681 2 668 3 623 4 603 6 541 5 493 Name: activity, dtype: int64
9. df_train 으로 X = “특성 컬럼”, y = “activity” 만들기
-
이제 훈련데이터의 X와 y로 구분
-
전처리는 거의 완료 단계로..
-
참고로 train데이터만 하는 이유는 test에 ‘activity’라벨이 없다.
-
여기서 test는 고객에게 보여줄 훈련모델의 답지
# ......
print(X.columns)
print(y.name)
Index(['tBodyAcc.mean.X', 'tBodyAcc.mean.Y', 'tBodyAcc.mean.Z',
'tBodyAcc.std.X', 'tBodyAcc.std.Y', 'tBodyAcc.std.Z', 'tBodyAcc.mad.X',
'tBodyAcc.mad.Y', 'tBodyAcc.mad.Z', 'tBodyAcc.max.X',
...
'fBodyBodyGyroJerkMag.meanFreq', 'fBodyBodyGyroJerkMag.skewness',
'fBodyBodyGyroJerkMag.kurtosis', 'angle.tBodyAccMean.gravity',
'angle.tBodyAccJerkMean.gravityMean', 'angle.tBodyGyroMean.gravityMean',
'angle.tBodyGyroJerkMean.gravityMean', 'angle.X.gravityMean',
'angle.Y.gravityMean', 'angle.Z.gravityMean'],
dtype='object', length=561)
activity
10. X_train, X_test, y_train, y_test 만들기
- 더 말할건 없을듯.
x_train values count: 2887 y_train values count: 2887 x_test values count: 722 y_test values count: 722
11. X_train, X_test 정규화 하기(옵션)
-
여기서 정규화와 안 된 데이터하고 비교가 중요
-
두 그룹을 만들필요가 있음
# train을 test 정규화 데이터 확인.
X_train_stand.head(5)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1.263369 | 0.041429 | -0.473708 | 0.558023 | 0.688464 | 0.823657 | 0.505502 | 0.752587 | 0.822891 | 1.082366 | ... | -0.288262 | 0.264987 | 0.073328 | -2.304810 | 1.330785 | -1.136089 | 1.079116 | -0.403241 | 0.550853 | 0.852714 |
| 1 | -0.793488 | -1.771799 | -5.097944 | 1.087796 | 0.344323 | 1.580836 | 1.094525 | 0.378718 | 1.626735 | 1.152838 | ... | 0.133866 | -0.377673 | -0.526774 | -0.150440 | 0.106660 | 1.485142 | -1.543728 | -0.498093 | 0.608812 | 0.544066 |
| 2 | 0.179134 | 0.148650 | 0.266953 | 0.364758 | 0.579055 | 0.753710 | 0.322035 | 0.522514 | 0.979664 | 0.535279 | ... | -0.764047 | 0.522051 | 0.486301 | -0.659841 | -1.414478 | -1.321346 | -0.859596 | -0.452643 | 0.518654 | -0.298958 |
| 3 | 0.179134 | 0.003306 | 0.016147 | -0.883506 | -0.976539 | -0.945008 | -0.877738 | -0.979125 | -0.954719 | -0.874164 | ... | 1.584276 | -0.587714 | -0.449341 | -0.224884 | 1.646946 | -0.489313 | -1.411773 | 1.902853 | -1.706329 | -1.846038 |
| 4 | -1.064547 | 0.352131 | 0.678432 | 0.908173 | 0.764055 | 1.003522 | 0.879676 | 0.880360 | 1.101037 | 0.798066 | ... | -0.661344 | 0.076891 | 0.028159 | 1.519444 | -2.164805 | 1.444516 | -0.934708 | -0.221441 | 0.876068 | -0.229858 |
5 rows × 561 columns
X_test_stand.head(5)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1.096096 | -0.393721 | -0.331865 | 0.810934 | 1.437674 | 0.840067 | 0.833843 | 1.473250 | 0.918939 | 0.674501 | ... | 0.483094 | 0.204334 | -0.009696 | -2.194124 | -1.329660 | 0.973570 | 0.488045 | -0.406303 | 0.782000 | 0.577781 |
| 1 | 2.784875 | 0.529633 | 0.675178 | 0.728368 | 1.359141 | 2.711874 | 0.660003 | 1.607020 | 2.751704 | 0.586195 | ... | 0.454734 | -1.060738 | -0.790499 | -0.726376 | 0.817020 | -1.071162 | -1.914002 | 0.351198 | 0.861634 | 1.851792 |
| 2 | 0.946647 | -0.037385 | 2.043828 | 2.269595 | 0.905257 | 2.037417 | 2.280880 | 0.900549 | 1.974245 | 2.078204 | ... | 0.527660 | -0.338752 | -0.428340 | 0.179548 | 0.879566 | -1.663406 | -0.887804 | -0.358360 | 0.246859 | 1.158059 |
| 3 | -0.039720 | 0.065061 | -0.086245 | -0.858729 | -0.954582 | -0.930698 | -0.850695 | -0.957595 | -0.936767 | -0.848784 | ... | 0.965214 | -0.265276 | -0.381824 | -0.023318 | 0.256337 | 1.084409 | -1.181595 | 2.103997 | -2.865241 | -0.301670 |
| 4 | -0.144335 | 0.033882 | 0.036565 | -0.826620 | -0.932431 | -0.900385 | -0.818865 | -0.934603 | -0.911276 | -0.821188 | ... | 0.082003 | -0.635853 | -0.621049 | -0.437089 | 0.832657 | -0.113546 | -0.036226 | 1.762642 | -1.126033 | -2.292538 |
5 rows × 561 columns
셀 따로 나누어서 실행하는 이유는 다를바 없이 데이터 양, 평균, 분산 등 요약데이터를 특정 vscode등에서 쉽게 보기 위해서
X_train_stand.describe()
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | ... | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 | 2.887000e+03 |
| mean | 6.472904e-16 | 2.092003e-17 | 1.052155e-16 | -1.230590e-17 | 6.214480e-17 | -3.568711e-17 | 1.421332e-16 | -4.307065e-18 | -6.399069e-17 | -4.060947e-17 | ... | -7.629659e-17 | 1.107531e-16 | -1.267508e-16 | 1.230590e-17 | 1.476708e-17 | 4.430124e-17 | 2.707298e-17 | -6.276010e-17 | 2.707298e-17 | -2.461180e-18 |
| std | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | ... | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 | 1.000173e+00 |
| min | -1.268818e+01 | -2.342331e+01 | -1.599233e+01 | -8.971479e-01 | -9.884742e-01 | -9.699890e-01 | -8.898078e-01 | -9.893966e-01 | -9.774766e-01 | -9.928536e-01 | ... | -3.840090e+00 | -2.105018e+00 | -1.223666e+00 | -2.935182e+00 | -2.249412e+00 | -1.656110e+00 | -1.996432e+00 | -9.822346e-01 | -3.419341e+00 | -3.542835e+00 |
| 25% | -2.194815e-01 | -1.920751e-01 | -2.581717e-01 | -8.812320e-01 | -9.427214e-01 | -9.175286e-01 | -8.729096e-01 | -9.442036e-01 | -9.218473e-01 | -8.741636e-01 | ... | -6.053818e-01 | -7.334877e-01 | -7.074494e-01 | -3.806759e-01 | -6.496783e-01 | -8.419520e-01 | -7.946339e-01 | -6.225867e-01 | -2.204204e-01 | -2.912801e-01 |
| 50% | 3.563251e-02 | -3.842552e-03 | 1.614739e-02 | -7.448097e-01 | -5.985811e-01 | -5.328190e-01 | -7.473800e-01 | -5.929309e-01 | -5.223275e-01 | -7.499101e-01 | ... | 8.108146e-03 | -1.237443e-01 | -2.815708e-01 | -1.942674e-03 | -8.790719e-04 | -1.121840e-02 | -6.359789e-03 | -4.230018e-01 | 3.866361e-01 | 1.540716e-01 |
| 75% | 1.950787e-01 | 1.438843e-01 | 2.277649e-01 | 7.990354e-01 | 8.981308e-01 | 8.174120e-01 | 7.963921e-01 | 8.996701e-01 | 8.228907e-01 | 8.100282e-01 | ... | 6.767221e-01 | 5.784795e-01 | 3.959634e-01 | 4.087895e-01 | 6.561582e-01 | 8.668047e-01 | 7.827263e-01 | -5.643759e-02 | 6.120323e-01 | 5.878297e-01 |
| max | 6.668596e+00 | 2.423050e+01 | 9.068676e+00 | 3.650260e+00 | 2.948252e+00 | 4.026240e+00 | 3.938252e+00 | 3.092351e+00 | 4.079735e+00 | 2.716207e+00 | ... | 2.892161e+00 | 4.033170e+00 | 5.074175e+00 | 2.855232e+00 | 2.190210e+00 | 1.590771e+00 | 2.041366e+00 | 2.922514e+00 | 3.020552e+00 | 4.012135e+00 |
8 rows × 561 columns
X_test_stand.describe()
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | ... | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 | 7.220000e+02 |
| mean | -3.395253e-16 | 3.444459e-17 | -6.642886e-17 | -1.107148e-16 | -1.230164e-17 | 1.230164e-18 | 1.230164e-18 | -6.150820e-17 | -1.955961e-16 | 3.567476e-17 | ... | 4.920656e-17 | 2.829377e-17 | 1.045639e-16 | -1.968262e-17 | 3.690492e-17 | 1.968262e-17 | -4.920656e-18 | 3.567476e-17 | -3.321443e-17 | 5.166689e-17 |
| std | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | ... | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 | 1.000693e+00 |
| min | -1.105415e+01 | -1.480303e+01 | -4.384599e+00 | -8.679028e-01 | -9.545815e-01 | -9.433283e-01 | -8.604884e-01 | -9.575946e-01 | -9.495121e-01 | -8.763795e-01 | ... | -3.633154e+00 | -1.936066e+00 | -1.185885e+00 | -2.903637e+00 | -2.156165e+00 | -1.762665e+00 | -2.011242e+00 | -1.000798e+00 | -3.215631e+00 | -3.282552e+00 |
| 25% | -9.949983e-02 | -1.459564e-01 | -1.817641e-01 | -8.518483e-01 | -9.082668e-01 | -8.902811e-01 | -8.457977e-01 | -9.095212e-01 | -8.959821e-01 | -8.432647e-01 | ... | -6.022825e-01 | -7.149198e-01 | -7.007901e-01 | -3.670513e-01 | -6.500268e-01 | -7.398856e-01 | -7.590126e-01 | -6.474570e-01 | -2.885209e-01 | -1.860478e-01 |
| 50% | 4.994966e-02 | 3.388159e-02 | -3.166282e-02 | -7.635488e-01 | -6.615906e-01 | -6.086260e-01 | -7.564290e-01 | -6.555679e-01 | -6.002927e-01 | -7.623172e-01 | ... | 2.933475e-02 | -1.454774e-01 | -2.721791e-01 | 3.052797e-03 | -2.750294e-03 | 6.121582e-02 | 1.014709e-03 | -4.523286e-01 | 4.172759e-01 | 2.232202e-01 |
| 75% | 2.143441e-01 | 1.714048e-01 | 1.344720e-01 | 8.361623e-01 | 9.379789e-01 | 8.653272e-01 | 8.179281e-01 | 9.276163e-01 | 8.571248e-01 | 8.882667e-01 | ... | 6.279329e-01 | 5.485556e-01 | 3.915034e-01 | 3.736745e-01 | 7.092394e-01 | 8.135150e-01 | 7.833866e-01 | 2.662289e-02 | 6.346770e-01 | 5.934982e-01 |
| max | 4.040251e+00 | 8.737372e+00 | 1.510127e+01 | 2.709946e+00 | 2.670049e+00 | 3.325705e+00 | 2.861164e+00 | 2.664636e+00 | 3.072884e+00 | 2.127877e+00 | ... | 3.027390e+00 | 3.549110e+00 | 4.522284e+00 | 2.979537e+00 | 2.161767e+00 | 1.537691e+00 | 2.006651e+00 | 2.671643e+00 | 2.756925e+00 | 3.701746e+00 |
8 rows × 561 columns
요약도 마찬가지..
12. AI Model : 분류
-
드디어 위 문제에 관해서 분류 모델링 선택해 진행한다.
-
훈련등은 다음 프로세스에..
-
아래 코드는 f1_score micro형식만 추출해 구분목적으로 코드 작성.
-
KNN모델을 예로 첫번째로 진행.
KNeighborsClassifier()
13. AI모델에서의 .fit // .predict // score (정확도, 정밀도, 재현율, F1 Score)
-
드디어 훈련, 평가, 성능확인 등 진행해본다.
-
일단 대표로 KNN.. 과연….
-
정규화로 진행은 일단 한번 진행하고 나서…
-
훈련 후 평가출력결과는 아래에 표기
| precision | recall | f1-score | support | |
|---|---|---|---|---|
| STANDING | 1.000000 | 0.993333 | 0.996656 | 150.000000 |
| SITTING | 0.872611 | 0.907285 | 0.889610 | 151.000000 |
| LAYING | 0.864078 | 0.809091 | 0.835681 | 110.000000 |
| WALKING | 0.930693 | 1.000000 | 0.964103 | 94.000000 |
| WALKING_DOWNSTAIRS | 0.990291 | 0.944444 | 0.966825 | 108.000000 |
| WALKING_UPSTAIRS | 0.990826 | 0.990826 | 0.990826 | 109.000000 |
| accuracy | 0.940443 | 0.940443 | 0.940443 | 0.940443 |
| macro avg | 0.941417 | 0.940830 | 0.940617 | 722.000000 |
| weighted avg | 0.940789 | 0.940443 | 0.940162 | 722.000000 |
KNN 분류 결과로…
-
STANDING 이 perfect인건 박수칠 만함…
-
f1-score 최저값은 LAYING 84%
-
평균은 94%…..
-
다른모델도 이와같이 12, 13 프로세스 반복해 나가면서 진행.
-
KNN 그 외 옵션등으로 성능향상 부분은 나중에..
re12, 13. 다음은 의사결정트리
-
의사결정트리로 결과내보기.
-
KNN등 다른 모델들과 비교해보면서…
-
성능향상은 다른 모델들 해보고 나서..
# f1-score등 성능확인
dt_res = classification_report(y_test, y_predict, ...)
# ......
df_dt_res
| precision | recall | f1-score | support | |
|---|---|---|---|---|
| STANDING | 1.000000 | 1.000000 | 1.000000 | 150.000000 |
| SITTING | 0.930556 | 0.887417 | 0.908475 | 151.000000 |
| LAYING | 0.854701 | 0.909091 | 0.881057 | 110.000000 |
| WALKING | 0.882353 | 0.957447 | 0.918367 | 94.000000 |
| WALKING_DOWNSTAIRS | 0.923810 | 0.898148 | 0.910798 | 108.000000 |
| WALKING_UPSTAIRS | 0.923077 | 0.880734 | 0.901408 | 109.000000 |
| accuracy | 0.923823 | 0.923823 | 0.923823 | 0.923823 |
| macro avg | 0.919083 | 0.922140 | 0.920018 | 722.000000 |
| weighted avg | 0.925012 | 0.923823 | 0.923881 | 722.000000 |
결정트리 분류 결과로…
-
STANDING 이 perfect라 박수칠 만함…
-
f1-score 최저값은 LAYING 86.7..% KNN보다 괜찮은데?
-
평균은 92% KNN보다는… 아마도 전체적으로 낮아서…
-
그래도 KNN보다 좋아보이는건 사실
-
다른모델도 이와같이 12, 13 프로세스 반복해 나가면서 진행.
-
dt 그 외 옵션등으로 성능향상 부분은 나중에..
-
…. 다음은 선형회귀를 할까 했는데 분류가 아닌 예측에 최적이라..
-
로지스틱 회귀로..
re12, 13. 다음은 로지스틱회귀
-
로지스틱회귀로 결과내보기.
-
KNN등 다른 모델들과 비교해보면서…
-
성능향상은 다른 모델들 해보고 나서..
# f1-score등 성능확인
lg_res = classification_report(y_test, y_predict, ... )
# ......
print(df_lg_res)
precision recall f1-score support
STANDING 1.000000 1.000000 1.000000 150.000000
SITTING 0.959184 0.933775 0.946309 151.000000
LAYING 0.911504 0.936364 0.923767 110.000000
WALKING 0.989362 0.989362 0.989362 94.000000
WALKING_DOWNSTAIRS 0.990741 0.990741 0.990741 108.000000
WALKING_UPSTAIRS 0.990909 1.000000 0.995434 109.000000
accuracy 0.973684 0.973684 0.973684 0.973684
macro avg 0.973617 0.975040 0.974269 722.000000
weighted avg 0.973838 0.973684 0.973697 722.000000
로지스틱회귀 분류 결과로…
-
STANDING 이 perfect라 박수칠 만함.
-
f1-score 최저값은 LAYING 92.3% …
-
평균은 97% 로지스틱회귀 역대급.. 이었다가 SVM에 밀림. 그래도 역시 이진분류다운…
-
다른모델도 이와같이 12, 13 프로세스 반복해 나가면서 진행.
-
lg 그 외 옵션등으로 성능향상 부분은 나중에..
re12, 13. 다음은 랜덤포레스트
-
랜덤포레스트로 결과내보기.
-
KNN등 다른 모델들과 비교해보면서…
-
성능향상은 다른 모델들 해보고 나서..
# f1-score등 성능확인
rfc_res = classification_report(y_test, y_predict, ... )
# ......
df_rfc_res = pd.DataFrame(rfc_res).T
df_rfc_res
| precision | recall | f1-score | support | |
|---|---|---|---|---|
| STANDING | 1.000000 | 0.993333 | 0.996656 | 150.000000 |
| SITTING | 0.945946 | 0.927152 | 0.936455 | 151.000000 |
| LAYING | 0.902655 | 0.927273 | 0.914798 | 110.000000 |
| WALKING | 0.958763 | 0.989362 | 0.973822 | 94.000000 |
| WALKING_DOWNSTAIRS | 0.962264 | 0.944444 | 0.953271 | 108.000000 |
| WALKING_UPSTAIRS | 0.954128 | 0.954128 | 0.954128 | 109.000000 |
| accuracy | 0.955679 | 0.955679 | 0.955679 | 0.955679 |
| macro avg | 0.953959 | 0.955949 | 0.954855 | 722.000000 |
| weighted avg | 0.955925 | 0.955679 | 0.955711 | 722.000000 |
랜덤포레스트 분류 결과로…
- 원래 n_estimators 기본값은 100 이 중 10이하로 낮은 수치로 사용시 성능이 잘 안나옴.
그렇기에 평균 92%등 낮게 나오게 됨.
-
반면.. 10 이상 예로 15수치정도로 들어갔음, 성적표는 아래와 같음
-
STANDING 이 perfect가 아닌.. 99.6%
-
f1-score 최저값은 LAYING 92.0% …
-
평균은 95.1% .. 의사결정, KNN보단 높게 나옴
-
근데 랜덤포레스트의 경우 좀 더 옵션을 여러개 붙이면 어쩌면…
실제 다른 분들이 했을 때, 역대 성적이 나온것도 랜덤포레스트 였음.
- 트리모델의 경우 데이터양이 2800정도로는 활약하기 힘든부분도..
그렇다고 많으면 그 만큼 더 걸리기도함.
-
다른모델도 이와같이 12, 13 프로세스 반복해 나가면서 진행.
-
lg 그 외 옵션등으로 성능향상 부분은 나중에..
re12, 13. 다음은 SVM(서포트 벡터 머신)
-
서포트 벡터 머신으로 결과내보기.
-
KNN등 다른 모델들과 비교해보면서…
-
성능향상은 다른 모델들 해보고 나서..
# f1-score등 성능확인
svm_res = classification_report(y_test, y_predict, ...)
# ......
df_svm_res = pd.DataFrame(svm_res).T
df_svm_res
| precision | recall | f1-score | support | |
|---|---|---|---|---|
| STANDING | 1.000000 | 1.000000 | 1.000000 | 150.000000 |
| SITTING | 0.953642 | 0.953642 | 0.953642 | 151.000000 |
| LAYING | 0.936364 | 0.936364 | 0.936364 | 110.000000 |
| WALKING | 0.989362 | 0.989362 | 0.989362 | 94.000000 |
| WALKING_DOWNSTAIRS | 1.000000 | 0.990741 | 0.995349 | 108.000000 |
| WALKING_UPSTAIRS | 0.990909 | 1.000000 | 0.995434 | 109.000000 |
| accuracy | 0.977839 | 0.977839 | 0.977839 | 0.977839 |
| macro avg | 0.978379 | 0.978351 | 0.978358 | 722.000000 |
| weighted avg | 0.977852 | 0.977839 | 0.977839 | 722.000000 |
SVM 분류 결과로…
-
STANDING 이 perfect라 박수칠 만함…
-
f1-score 최저값은 LAYING 93.6% …
-
평균은 97.7% 로지스틱회귀 97.3% 에 비해 좀 더 높은 역대급.. 왜 SVM이 잘쓰였는지.
-
기본옵션일 뿐인데..
-
다른모델도 이와같이 12, 13 프로세스 반복해 나가면서 진행.
-
lg 그 외 옵션등으로 성능향상 부분은 나중에..
re12, 13. 다음은 나이브 베이지안
-
덤으로 한다는 느낌… 나이브 베이지안으로 결과내보기.
-
나이브 베이즈도 여러 종류모델이 있는데 이 중 가우시안만..
-
가우시안을 택한 이유는 데이터를 기반으로 해야할 행동 분류라면 이 모델이 나아보이며 예시도 있기에
-
다만.. 나이브베이지안 하는 것들을 보니 주의할 점. 라벨들이 독립적이어야 한다.
-
데이터를 보아하니 라벨은 하나뿐이겠다. (실은 여러개 있어야..) 일단 해보는건 어떨까 해서…
-
KNN등 다른 모델들과 비교해보면서…
-
성능향상은 다른 모델들 해보고 나서..
# f1-score등 성능확인
gnb_res = classification_report(y_test, y_predict, ...)
# ......
print(df_gnb_res)
precision recall f1-score support
STANDING 1.000000 0.973333 0.986486 150.000000
SITTING 0.880000 0.582781 0.701195 151.000000
LAYING 0.605096 0.863636 0.711610 110.000000
WALKING 0.884615 0.734043 0.802326 94.000000
WALKING_DOWNSTAIRS 0.816327 0.740741 0.776699 108.000000
WALKING_UPSTAIRS 0.720280 0.944954 0.817460 109.000000
accuracy 0.804709 0.804709 0.804709 0.804709
macro avg 0.817720 0.806581 0.799296 722.000000
weighted avg 0.830011 0.804709 0.804066 722.000000
나이브 베이지안 분류 결과로…
-
f1-score 최저값은 SITTING 70%정도..
-
평균은 80.5%정도.. 이 데이터에서는 이 모델 대충옵션을 넣은 것으로 쓰이기엔 애매한 것이구나라고..
-
다른모델도 이와같이 12, 13 프로세스 반복해 나가면서 진행.
-
lg 그 외 옵션등으로 성능향상 부분은 나중에..
re12, 13. 다음은 XgBoost
-
XgBoost으로 결과내보기. 카글에 은근 쓰이는 모델
-
다만.. 얘가 분류전문인지….
-
KNN등 다른 모델들과 비교해보면서…
-
성능향상은 다른 모델들 해보고 나서..
# f1-score등 성능확인
xgb_res = classification_report(y_test, y_predict + 1, ...)
# ......
df_xgb_res
| precision | recall | f1-score | support | |
|---|---|---|---|---|
| STANDING | 1.000000 | 1.000000 | 1.000000 | 150.000000 |
| SITTING | 0.959732 | 0.947020 | 0.953333 | 151.000000 |
| LAYING | 0.928571 | 0.945455 | 0.936937 | 110.000000 |
| WALKING | 0.989247 | 0.978723 | 0.983957 | 94.000000 |
| WALKING_DOWNSTAIRS | 0.963303 | 0.972222 | 0.967742 | 108.000000 |
| WALKING_UPSTAIRS | 0.972477 | 0.972477 | 0.972477 | 109.000000 |
| accuracy | 0.969529 | 0.969529 | 0.969529 | 0.969529 |
| macro avg | 0.968888 | 0.969316 | 0.969074 | 722.000000 |
| weighted avg | 0.969651 | 0.969529 | 0.969563 | 722.000000 |
XGBoost 분류 결과로…
-
XGBoost 답게, 넘사벽의 로지스틱과 SVM만큼은 아니더라도 대충넣은 옵으로 96.9프로 정도
-
다른모델과 다른점은 이 인코딩 라벨을 0부터 시작하지 않으면 삑삑 거림..
그래서.. y_train - 1, y_predict + 1 이유는 이래서 있는거..
-
f1-score 최저값은 LAYING 93.6%정도.
-
평균은 96.9%정도.. XGBoost 모델은 AI모델에서 은근 고급?으로 생각하고 있었는데.. 역시나.
-
XGBoost 방식이 랜덤포레스트와 달리 boost 앙상블 같은 다른 방식으로 해결하려하는 모델.
비슷하거나 경우에 따라선 좋은 결과를 나올 수도 있음
-
다른모델도 이와같이 12, 13 프로세스 반복해 나가면서 진행.
-
lg 그 외 옵션등으로 성능향상 부분은 나중에..
정규화 데이터로…
-
이때까지는 정규화 없이 진행 정규화 이후로 어떠한 데이터가 나올지 확인해보자.
-
원래 NN까지 할려고 했는데 생각할게 많아서.. 이 부분은 캡스톤 외에..
아니면 끝나고도 추후 2-3차적으로 올릴때 보안하는 쪽으로..
models = [
...
]
resout1 = []
for model in models:
#......
resout1.append(df_outres.copy())
# ......
# f1-score등 성능확인
out_restxt = classification_report(y_test, y_predict + 1, ...)
# ......
resout1.append(df_outres.copy())
14. df_test 에 대한 분류 하여 “activity” 컬럼 작성하여 test_result.csv 파일 만들기
-
‘df_test’의 경우 정답 없는 문제지라 AI에게 테스트로 predict로 던져보는…
-
디코딩해서 만든게 test_result.csv>
-
즉 성능 보고가 아닌.. df_test의 답지를 만들라는거.. 각 모델에 따라..
-
먼저 성능 보고 하고 답지만들고, 답지 출력
94.0443
# 각 성능지표데이터에 index name 붙이기
resout_name = [
"knn algorithm",
"dTree algorithm",
......
"GNB algorithm_norm",
"XGB algorithm_norm",
]
......
pmf1s
# 아래와 같이 성적표 정리를 해둠.
# 참고 및 모델선택은 추후 아래에..
| models | micro f1s | |
|---|---|---|
| 0 | knn algorithm | 94.0443 |
| 1 | dTree algorithm | 92.3823 |
| 2 | LogisR algorithm | 97.3684 |
| 3 | RFC algorithm | 95.5679 |
| 4 | SVM algorithm | 97.7839 |
| 5 | GNB algorithm | 80.4709 |
| 6 | XGB algorithm | 96.9529 |
| 7 | knn algorithm_norm | 93.6288 |
| 8 | dTree algorithm_norm | 90.8587 |
| 9 | LogisR algorithm_norm | 97.6454 |
| 10 | RFC algorithm_norm | 92.5208 |
| 11 | SVM algorithm_norm | 97.3684 |
| 12 | GNB algorithm_norm | 75.6233 |
| 13 | XGB algorithm_norm | 95.0139 |
-
다음 위 모델 가지고 result_test.csv 출력
-
X_test 지정
-
한꺼번에 처리
| knn algorithm | dTree algorithm | LogisR algorithm | RFC algorithm | SVM algorithm | GNB algorithm | XGB algorithm | knn algorithm_norm | dTree algorithm_norm | LogisR algorithm_norm | RFC algorithm_norm | SVM algorithm_norm | GNB algorithm_norm | XGB algorithm_norm | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| 1 | 2 | 2 | 2 | 2 | 2 | 3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| 2 | 2 | 2 | 2 | 2 | 2 | 3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| 3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 2 | 2 | 2 | 2 | 2 | 2 |
| 4 | 2 | 3 | 2 | 2 | 2 | 3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 1536 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 |
| 1537 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 |
| 1538 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 |
| 1539 | 5 | 5 | 5 | 5 | 5 | 4 | 5 | 5 | 5 | 5 | 5 | 5 | 4 | 5 |
| 1540 | 6 | 4 | 6 | 6 | 6 | 6 | 6 | 6 | 4 | 6 | 6 | 6 | 6 | 6 |
1541 rows × 14 columns
- 디코딩으로 마무리
| knn algorithm | dTree algorithm | LogisR algorithm | RFC algorithm | SVM algorithm | GNB algorithm | XGB algorithm | knn algorithm_norm | dTree algorithm_norm | LogisR algorithm_norm | RFC algorithm_norm | SVM algorithm_norm | GNB algorithm_norm | XGB algorithm_norm | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING |
| 1 | STANDING | STANDING | STANDING | STANDING | STANDING | SITTING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING |
| 2 | STANDING | STANDING | STANDING | STANDING | STANDING | SITTING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING |
| 3 | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | SITTING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING |
| 4 | STANDING | SITTING | STANDING | STANDING | STANDING | SITTING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING | STANDING |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 1536 | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS |
| 1537 | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS |
| 1538 | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS |
| 1539 | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING_DOWNSTAIRS | WALKING | WALKING_DOWNSTAIRS |
| 1540 | WALKING_UPSTAIRS | WALKING | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS | WALKING_UPSTAIRS |
1541 rows × 14 columns
여기까지 정리 및 보고
-
위 각 모델 정리된 pandas데이터를 csv로…
-
지금 기록된 csv와 여기 현재까지 해둔 jupyter로 제출
-
다만 위와 같이 한건 그 당시 전체 출력하면 되겠다는 학구열의 오류.
-
진짜 결론은 아래를 참조
결론!
-
여기서 제일 좋은 모델로 제일 좋은 예측한 답안지를 제출해야함
-
그러면 그래프를 그려본다. 성능 지수는 평균 f1기준..
-
여기까지 기록만 본다면 SVM이 기준.
-
위 svm f1 성능 기록 : 97.78% (아래 지표 및 선택한 근거를 참조)
-
SVM기준의 답지등으로 기존 test.csv를 activate에 합쳐서 제출하도록 합시다.
-
아래 데이터는 어느 데이터가 f1s micro 기준으로 제일 나은지를 보여주는 지표
| models | micro f1s | |
|---|---|---|
| 0 | knn algorithm | 94.0443 |
| 1 | dTree algorithm | 92.3823 |
| 2 | LogisR algorithm | 97.3684 |
| 3 | RFC algorithm | 95.5679 |
| 4 | SVM algorithm | 97.7839 |
| 5 | GNB algorithm | 80.4709 |
| 6 | XGB algorithm | 96.9529 |
| 7 | knn algorithm_norm | 93.6288 |
| 8 | dTree algorithm_norm | 90.8587 |
| 9 | LogisR algorithm_norm | 97.6454 |
| 10 | RFC algorithm_norm | 92.5208 |
| 11 | SVM algorithm_norm | 97.3684 |
| 12 | GNB algorithm_norm | 75.6233 |
| 13 | XGB algorithm_norm | 95.0139 |
97.7839
-
위와 같이 최대값을 출력할 때, 97.7839%의 SVM 알고리즘이 최고의 성적표를 제출.
-
정규화했을경우 오히려 살짝 성능 저하를 보여줌
-
위 데이터만의 결론으로 SVM으로 진행.
0 STANDING
1 STANDING
2 STANDING
3 STANDING
4 STANDING
...
1536 WALKING_DOWNSTAIRS
1537 WALKING_UPSTAIRS
1538 WALKING_UPSTAIRS
1539 WALKING_DOWNSTAIRS
1540 WALKING_UPSTAIRS
Name: activity, Length: 1541, dtype: object
from sklearn import svm # support vector machine
# 모델 생성
svm = svm.SVC(kernel = 'linear', ...)
# ......
print(df_svm_res)
precision recall f1-score support
STANDING 1.000000 0.993333 0.996656 150.000000
SITTING 0.948052 0.966887 0.957377 151.000000
LAYING 0.953271 0.927273 0.940092 110.000000
WALKING 1.000000 1.000000 1.000000 94.000000
WALKING_DOWNSTAIRS 0.990826 1.000000 0.995392 108.000000
WALKING_UPSTAIRS 1.000000 1.000000 1.000000 109.000000
accuracy 0.980609 0.980609 0.980609 0.980609
macro avg 0.982025 0.981249 0.981586 722.000000
weighted avg 0.980644 0.980609 0.980574 722.000000
- 여기서 98프로 성능으로 나오는건 그외 C, degree등 추가 옵션으로 더 나은 성능으로 데이터를 뽑아낸 것
- 이후 test예시 데이터와 답지를 합쳐서 제출.
....to_csv('./test_result.csv')
그외 참조 사이트
- matlip chart 등 확인
https://pythonspot.com/matplotlib-bar-chart/
- pandas drop확인
https://fhaktj8-18.tistory.com/entry/drop-%ED%95%A8%EC%88%98-%ED%99%9C%EC%9A%A9%ED%95%B4%EC%84%9C-%ED%96%89-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0
- 정규화 StandardScaler 기능 및 확인
https://jimmy-ai.tistory.com/139
마무리
- 분류모델에 쓰인 온갖 전처리부터, 모델까지 정리하는 유익한 시간.
- 앞에서도 언급했으나 여러모델들을 테스트해서 출력해보는 학구열은 좋았으나 여기서 목적은..
- 고객에게 예시와 함께 판별가능한 모델과 동시에 솔루션을 제공하는게 목적.
- 풀어낸 csv 그리고 성능지표등을 보여주기만 하면 됬었을..
- 사족이 많고 신경망도 추후 개선할 예정이지만 그래도 캡스톤을 완수한 평가는 있음.
댓글남기기