lexxai / goit_python_ds_hw_05

Метод опорних векторів -Support Vector Machine, SVM. Дерева рішень - RandomForestClassifier, XGBClassifier

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Модуль 5. Домашнє завдання. Інші алгоритми навчання з учителем. Метод опорних векторів - Support Vector Machine, SVM. Дерева рішень - RandomForestClassifier, XGBClassifier.

З циклу домашніх завдань Python Data Science.

В домашньому завданні до даного модулю ви потренуєтесь робити тестове завдання для влаштування на роботу. За даними акселерометра з мобільного телефону потрібно класифікувати, якою діяльністю займається людина: йде, стоїть, біжить чи йде по сходах. Знайти датасет ви можете за посиланням.

Використайте алгоритми SVM та випадковий ліс з бібліотеки scikit-learn. Як характеристики можете брати показники з акселерометра, проте щоб покращити результати роботи алгоритмів, спочатку можна підготувати наш датасет і розрахувати часові ознаки (time domain features). Більше ці характеристики описані в даній статті.

  • Порівняйте результати роботи обох алгоритмів на різних фічах та різні моделі між собою.

  • Порівняйте результати роботи обох алгоритмів на різних фічах та різні моделі між собою. Використайте метод classification report для порівняння.

  • Порівняння моделей на основі однієї метрики(такої як Accuracy)- не приймається.

Дз повинно бути виконано у Jupyter Nootebook,(або Google Colab) і задеплоїне на Гітхаб у вигляді файлу .ipynb.

Виконнаня:

Результати:

Різні набори даних були створені з файлів у форматі CSV, завантажених з різних тек, кожен з яких був названий відповідно до відповідної діяльності. І кожен файл мав 30 записів з 3-х параметрів (координат) акселерометра.

  • Набір даних f0s0: містить дані за 4 характеристиками.
  • Набір даних f0s1: Містить дані з 31 характеристикою.
  • Набір даних f1s0: містить дані з 91 ознакою.
  • Набір даних f1s1: Містить дані зі 118 ознаками.

У наборі даних "f0s0" модель SVC-Linear була пропущена за причини тривалої роботи, що потенційно перевищувала одну годину.

Моделі, використані для аналізу, включали SVC, SVC-Linear та RandomForestClassifier.

  • Для набору даних з 4 ознаками (f0s0) модель RandomForestClassifier показала кращі результати.
  • Для набору даних з 31 ознакою (f0s1) краще працює RandomForestClassifier.
  • Для набору даних з 91 ознакою (f1s0) RandomForestClassifier працює краще.
  • Для набору даних зі 118 ознаками (f1s1) RandomForestClassifier працює краще.

Цей набір даних 'f0s1' досягнув ідеальної точності 1.0000, що робить його найвищим серед наданих наборів даних.

Набір даних 'f0s1' не був вирівняний і до нього були додані статистичні характеристики.

Переможцем став набір даних 'f0s1' з 31 ознакою при використанні моделі RandomForestClassifier.

Extra Tasks

Крім того, модель SVC було доповнено функцією StandardScaler(), що призвело до незначного збільшення точності на 0,452%.

Data set: f0s1, shape: (193860, 31), model: SVC
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000     30672
     walking     1.0000    1.0000    1.0000     30672
     running     1.0000    1.0000    1.0000     30672
      stairs     1.0000    1.0000    1.0000     30672

    accuracy                         1.0000    122688
   macro avg     1.0000    1.0000    1.0000    122688
weighted avg     1.0000    1.0000    1.0000    122688
--------------------------------------------------------------------------------
Data set: f0s1, shape: (193860, 31), model: RandomForestClassifier
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000     30672
     walking     1.0000    1.0000    1.0000     30672
     running     1.0000    1.0000    1.0000     30672
      stairs     1.0000    1.0000    1.0000     30672

    accuracy                         1.0000    122688
   macro avg     1.0000    1.0000    1.0000    122688
weighted avg     1.0000    1.0000    1.0000    122688
  • Для набору даних з 4 ознаками (f0s0) модель RandomForestClassifier показала кращі результати.
  • Для набору даних з 31 ознакою (f0s1) краще працює як RandomForestClassifier так і SVC + StandardScaler().
  • Для набору даних з 91 ознакою (f1s0) RandomForestClassifier працює краще.
  • Для набору даних зі 118 ознаками (f1s1) RandomForestClassifier працює краще.

Цей набір даних 'f0s1' досягнув ідеальної точності 1.0000, що робить його найвищим серед наданих наборів даних як для RandomForestClassifier так і SVC з StandardScaler().

Час витарчений для навчання та прогнозування відповідно:

- classification: SVC
CPU times: user 1min 28s, sys: 222 ms, total: 1min 28s
Wall time: 1min 29s
CPU times: user 28.9 s, sys: 22.1 ms, total: 28.9 s
Wall time: 28.9 s
-----------------------------------
- classification: RandomForestClassifier
CPU times: user 38.8 s, sys: 39.9 ms, total: 38.8 s
Wall time: 38.9 s
CPU times: user 828 ms, sys: 2 ms, total: 830 ms
Wall time: 824 ms

Згідно цього вибору за рахункок швидкості виграє RandomForestClassifier.

Best Parameters of datast 'f0s1' with RandomForestClassifier model is :

  • 'n_estimators': 25
  • 'min_samples_split': 20
  • 'min_samples_leaf': 2
  • 'max_depth': 20

Best Scoring: 1.00

Best Parameters of datast 'f0s1' with XGBClassifier model is :

  • 'n_estimators': 1
  • 'min_samples_split': 5
  • 'min_samples_leaf': 4
  • 'max_depth': 100

Best Scoring: 1.00

Балансування записів з додаванням синтеничних данних

SMOTE

Додано додковий reshahping з викорисанням SMOTE.

Корий синтетично збалансував кількість класів у датасет в сторону збільшення.

sm = SMOTE(random_state=0)
X_resampled, y_resampled = sm.fit_resample(X, y)
DATASET f0s1. shape: (193860, 31)
class: 0, rows:   31170, idle   , prop: 0.1608
class: 1, rows:   55500, walking, prop: 0.2863
class: 2, rows:  102240, running, prop: 0.5274
class: 3, rows:    4950, stairs , prop: 0.02553
X.shape=(193860, 30)
X_resampled.shape=(408960, 30)
y_resampled.shape=(408960,)
class: 0, rows:  102240, idle   , prop: 0.25
class: 1, rows:  102240, walking, prop: 0.25
class: 2, rows:  102240, running, prop: 0.25
class: 3, rows:  102240, stairs , prop: 0.25
Classification report
limit_frames=None
--------------------------------------------------------------------------------
Data set: f0s0, shape: (193860, 4), model: SVC
              precision    recall  f1-score   support

        idle     0.9601    0.9839    0.9718      9351
     walking     0.8017    0.8979    0.8470     16650
     running     0.9279    0.9052    0.9164     30672
      stairs     1.0000    0.0054    0.0107      1485

    accuracy                         0.8928     58158
   macro avg     0.9224    0.6981    0.6865     58158
weighted avg     0.8988    0.8928    0.8823     58158

--------------------------------------------------------------------------------
Data set: f0s0, shape: (193860, 4), model: RandomForestClassifier
              precision    recall  f1-score   support

        idle     0.9997    1.0000    0.9998      9351
     walking     0.9995    0.9996    0.9995     16650
     running     0.9996    1.0000    0.9998     30672
      stairs     1.0000    0.9906    0.9953      1485

    accuracy                         0.9996     58158
   macro avg     0.9997    0.9975    0.9986     58158
weighted avg     0.9996    0.9996    0.9996     58158

--------------------------------------------------------------------------------
Data set: f0s1, shape: (193860, 31), model: SVC
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000     30672
     walking     1.0000    1.0000    1.0000     30672
     running     1.0000    1.0000    1.0000     30672
      stairs     1.0000    1.0000    1.0000     30672

    accuracy                         1.0000    122688
   macro avg     1.0000    1.0000    1.0000    122688
weighted avg     1.0000    1.0000    1.0000    122688

--------------------------------------------------------------------------------
Data set: f0s1, shape: (193860, 31), model: SVC_Linear
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000     30672
     walking     0.9939    0.9587    0.9760     30672
     running     1.0000    1.0000    1.0000     30672
      stairs     0.9601    0.9941    0.9768     30672

    accuracy                         0.9882    122688
   macro avg     0.9885    0.9882    0.9882    122688
weighted avg     0.9885    0.9882    0.9882    122688

--------------------------------------------------------------------------------
Data set: f0s1, shape: (193860, 31), model: RandomForestClassifier
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000     30672
     walking     1.0000    1.0000    1.0000     30672
     running     1.0000    1.0000    1.0000     30672
      stairs     1.0000    1.0000    1.0000     30672

    accuracy                         1.0000    122688
   macro avg     1.0000    1.0000    1.0000    122688
weighted avg     1.0000    1.0000    1.0000    122688

--------------------------------------------------------------------------------
Data set: f1s0, shape: (6462, 91), model: SVC
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000      1023
     walking     0.9851    0.9706    0.9778      1022
     running     1.0000    1.0000    1.0000      1023
      stairs     0.9711    0.9853    0.9781      1022

    accuracy                         0.9890      4090
   macro avg     0.9890    0.9890    0.9890      4090
weighted avg     0.9890    0.9890    0.9890      4090

--------------------------------------------------------------------------------
Data set: f1s0, shape: (6462, 91), model: SVC_Linear
              precision    recall  f1-score   support

        idle     0.9894    1.0000    0.9947      1023
     walking     0.8653    0.9178    0.8908      1022
     running     1.0000    0.9892    0.9946      1023
      stairs     0.9125    0.8571    0.8840      1022

    accuracy                         0.9411      4090
   macro avg     0.9418    0.9410    0.9410      4090
weighted avg     0.9418    0.9411    0.9410      4090

--------------------------------------------------------------------------------
Data set: f1s0, shape: (6462, 91), model: RandomForestClassifier
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000      1023
     walking     0.9941    0.9902    0.9922      1022
     running     1.0000    1.0000    1.0000      1023
      stairs     0.9903    0.9941    0.9922      1022

    accuracy                         0.9961      4090
   macro avg     0.9961    0.9961    0.9961      4090
weighted avg     0.9961    0.9961    0.9961      4090

--------------------------------------------------------------------------------
Data set: f1s1, shape: (6462, 118), model: SVC
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000      1023
     walking     0.9990    0.9765    0.9876      1022
     running     1.0000    1.0000    1.0000      1023
      stairs     0.9770    0.9990    0.9879      1022

    accuracy                         0.9939      4090
   macro avg     0.9940    0.9939    0.9939      4090
weighted avg     0.9940    0.9939    0.9939      4090

--------------------------------------------------------------------------------
Data set: f1s1, shape: (6462, 118), model: SVC_Linear
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000      1023
     walking     0.9940    0.9755    0.9847      1022
     running     1.0000    1.0000    1.0000      1023
      stairs     0.9760    0.9941    0.9850      1022

    accuracy                         0.9924      4090
   macro avg     0.9925    0.9924    0.9924      4090
weighted avg     0.9925    0.9924    0.9924      4090

--------------------------------------------------------------------------------
Data set: f1s1, shape: (6462, 118), model: RandomForestClassifier
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000      1023
     walking     0.9980    1.0000    0.9990      1022
     running     1.0000    1.0000    1.0000      1023
      stairs     1.0000    0.9980    0.9990      1022

    accuracy                         0.9995      4090
   macro avg     0.9995    0.9995    0.9995      4090
weighted avg     0.9995    0.9995    0.9995      4090

RandomUnderSampler

Додано додковий reshahping з викорисанням RandomUnderSampler.

Корий синтетично збалансував кількість класів у датасет в сторону зменшення.

rundersampler = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = rundersampler.fit_resample(X, y)
DATASET f0s1. shape: (193860, 31)
class: 0, rows:   31170, idle   , prop: 0.1608
class: 1, rows:   55500, walking, prop: 0.2863
class: 2, rows:  102240, running, prop: 0.5274
class: 3, rows:    4950, stairs , prop: 0.02553
X.shape=(193860, 30)
X_resampled.shape=(19800, 30)
y_resampled.shape=(19800,)
class: 0, rows:    4950, idle   , prop: 0.25
class: 1, rows:    4950, walking, prop: 0.25
class: 2, rows:    4950, running, prop: 0.25
class: 3, rows:    4950, stairs , prop: 0.25
Classification report
limit_frames=None
--------------------------------------------------------------------------------
Data set: f0s0, shape: (193860, 4), model: SVC
              precision    recall  f1-score   support

        idle     0.9601    0.9839    0.9718      9351
     walking     0.8017    0.8979    0.8470     16650
     running     0.9279    0.9052    0.9164     30672
      stairs     1.0000    0.0054    0.0107      1485

    accuracy                         0.8928     58158
   macro avg     0.9224    0.6981    0.6865     58158
weighted avg     0.8988    0.8928    0.8823     58158

--------------------------------------------------------------------------------
Data set: f0s0, shape: (193860, 4), model: RandomForestClassifier
              precision    recall  f1-score   support

        idle     0.9997    1.0000    0.9998      9351
     walking     0.9995    0.9994    0.9994     16650
     running     0.9995    0.9999    0.9997     30672
      stairs     1.0000    0.9906    0.9953      1485

    accuracy                         0.9996     58158
   macro avg     0.9997    0.9975    0.9986     58158
weighted avg     0.9996    0.9996    0.9996     58158

--------------------------------------------------------------------------------
Data set: f0s1, shape: (193860, 31), model: SVC
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000      1485
     walking     1.0000    0.9778    0.9888      1485
     running     1.0000    1.0000    1.0000      1485
      stairs     0.9783    1.0000    0.9890      1485

    accuracy                         0.9944      5940
   macro avg     0.9946    0.9944    0.9944      5940
weighted avg     0.9946    0.9944    0.9944      5940

--------------------------------------------------------------------------------
Data set: f0s1, shape: (193860, 31), model: SVC_Linear
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000      1485
     walking     0.9882    0.9569    0.9723      1485
     running     1.0000    1.0000    1.0000      1485
      stairs     0.9582    0.9886    0.9732      1485

    accuracy                         0.9864      5940
   macro avg     0.9866    0.9864    0.9864      5940
weighted avg     0.9866    0.9864    0.9864      5940

--------------------------------------------------------------------------------
Data set: f0s1, shape: (193860, 31), model: RandomForestClassifier
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000      1485
     walking     1.0000    1.0000    1.0000      1485
     running     1.0000    1.0000    1.0000      1485
      stairs     1.0000    1.0000    1.0000      1485

    accuracy                         1.0000      5940
   macro avg     1.0000    1.0000    1.0000      5940
weighted avg     1.0000    1.0000    1.0000      5940

--------------------------------------------------------------------------------
Data set: f1s0, shape: (6462, 91), model: SVC
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000        50
     walking     0.8600    0.8776    0.8687        49
     running     1.0000    1.0000    1.0000        50
      stairs     0.8750    0.8571    0.8660        49

    accuracy                         0.9343       198
   macro avg     0.9337    0.9337    0.9337       198
weighted avg     0.9344    0.9343    0.9343       198

--------------------------------------------------------------------------------
Data set: f1s0, shape: (6462, 91), model: SVC_Linear
              precision    recall  f1-score   support

        idle     0.9804    1.0000    0.9901        50
     walking     0.7619    0.6531    0.7033        49
     running     1.0000    0.9800    0.9899        50
      stairs     0.6964    0.7959    0.7429        49

    accuracy                         0.8586       198
   macro avg     0.8597    0.8572    0.8565       198
weighted avg     0.8610    0.8586    0.8579       198

--------------------------------------------------------------------------------
Data set: f1s0, shape: (6462, 91), model: RandomForestClassifier
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000        50
     walking     0.8864    0.7959    0.8387        49
     running     1.0000    1.0000    1.0000        50
      stairs     0.8148    0.8980    0.8544        49

    accuracy                         0.9242       198
   macro avg     0.9253    0.9235    0.9233       198
weighted avg     0.9260    0.9242    0.9240       198

--------------------------------------------------------------------------------
Data set: f1s1, shape: (6462, 118), model: SVC
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000        50
     walking     0.9375    0.9184    0.9278        49
     running     1.0000    1.0000    1.0000        50
      stairs     0.9200    0.9388    0.9293        49

    accuracy                         0.9646       198
   macro avg     0.9644    0.9643    0.9643       198
weighted avg     0.9647    0.9646    0.9646       198

--------------------------------------------------------------------------------
Data set: f1s1, shape: (6462, 118), model: SVC_Linear
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000        50
     walking     0.8462    0.8980    0.8713        49
     running     1.0000    1.0000    1.0000        50
      stairs     0.8913    0.8367    0.8632        49

    accuracy                         0.9343       198
   macro avg     0.9344    0.9337    0.9336       198
weighted avg     0.9350    0.9343    0.9343       198

--------------------------------------------------------------------------------
Data set: f1s1, shape: (6462, 118), model: RandomForestClassifier
              precision    recall  f1-score   support

        idle     1.0000    1.0000    1.0000        50
     walking     1.0000    0.9796    0.9897        49
     running     1.0000    1.0000    1.0000        50
      stairs     0.9800    1.0000    0.9899        49

    accuracy                         0.9949       198
   macro avg     0.9950    0.9949    0.9949       198
weighted avg     0.9951    0.9949    0.9949       198

About

Метод опорних векторів -Support Vector Machine, SVM. Дерева рішень - RandomForestClassifier, XGBClassifier

License:MIT License


Languages

Language:Jupyter Notebook 100.0%