GithubHelp home page GithubHelp logo

fliw / har Goto Github PK

View Code? Open in Web Editor NEW

This project forked from rubixml/har

6.0 0.0 0.0 24.43 MB

:walking: Artificial Intelligence untuk mendeteksi pergerakan manusia seperti berdiri, berjalan, duduk dan berbaring. menggunakan klasifikator softmax di sensor data mobile. :walking:

Home Page: https://rubixml.com

License: MIT License

PHP 100.00%
machine-learning artificial-intelligence classifier php neural-network

har's Introduction

Rubix ML - Pendeteksi Pergerakan Manusia

Artificial Intelligence based on Softmax Classifier

Contoh proyek yang menunjukkan masalah pengenalan aktivitas manusia (HAR) menggunakan data sensor ponsel yang direkam dari unit pengukuran inersia internal (PII). Data pelatihan adalah pembacaan sensor beranotasi manusia dari 30 relawan sambil melakukan berbagai tugas seperti duduk, berdiri, berjalan, dan berbaring. Setiap sampel berisi Foto 561 Keadaan, namun, kami menunjukkan bahwa dengan teknik yang disebut proyeksi acak kami dapat mengurangi dimensi tanpa kehilangan keakuratan. Trainer yang akan kami latih untuk menyelesaikan tugas ini adalah Algoritma Softmax Classifier yang merupakan generalisasi multiclass dari classifier biner Logistic Regression.

  • Kesulitan: Medium
  • Waktu Untuk Belajar: Menit

Instalasi

Clone Project ini menggunakan Composer:

$ composer create-project rubix/har

Kebutuhan

  • PHP 7.2 Atau Diatasnya

Rekomendasi

  • Ekstensi Tensor Buat Latih dan ambil kesimpulan lebih cepat.
  • Minimum 1GB RAM Digunakan untuk training.

Tutorial

Pengenalan

Percobaan telah dilakukan dengan sekelompok 30 sukarelawan dalam kurun usia 19-48 tahun. Setiap orang melakukan enam aktivitas (berjalan, berjalan menaiki tangga, berjalan menuruni tangga, duduk, berdiri, dan berbaring) mengenakan smartphone di pinggang mereka. Dengan menggunakan accelerometer dan gyroscope yang tertanam, akselerasi linear 3-aksial dan kecepatan sudut 3-aksial dicatat pada kecepatan konstan 50Hz. Sinyal-sinyal sensor pra-diproses dengan menerapkan filter noise dan kemudian sampel dalam jendela geser lebar tetap 2,56 detik. Tujuan kami adalah untuk membangun classifier untuk mengenali aktivitas mana yang dilakukan pengguna dengan memberikan beberapa data yang tidak terlihat.

Catatan: Kode sumber untuk contoh ini dapat ditemukan di train.php Di Folder Root.

Ekstraksi Data

Data diberikan kepada kami dalam dua file NDJSON (newline delimited JSON) di dalam Folder root. Satu file berisi sampel pelatihan dan yang lainnya untuk pengujian. Kami akan menggunakan NDJSON extractor disediakan dalam Rubix ML untuk mengimpor data pelatihan ke objek datasets yang baru Labeled. Karena extractor adalah iterator, kita dapat meneruskan extractor langsung ke Factory Method fromIterator ().

use Rubix\ML\Datasets\Labeled;
use Rubix\ML\Extractors\NDJSON;

$dataset = Labeled::fromIterator(new NDJSON('train.ndjson'));

Persiapan Datasets

Dalam Machine Learning, pengurangan dimensi sering digunakan untuk mengompres sampel input sehingga sebagian besar atau semua informasi dipertahankan. Dengan mengurangi jumlah fitur input, kami dapat mempercepat proses pelatihan. (Semakin Banyak Semakin Pintar dan Akurat) Random Projection adalah teknik reduksi dimensionalitas tanpa pengawasan yang efisien secara komputasional berdasarkan pada Johnson-Lindenstrauss lemma yang menyatakan bahwa satu set titik dalam ruang berdimensi tinggi dapat disematkan ke dalam ruang berdimensi lebih rendah sedemikian rupa sehingga jarak antara titik hampir terpelihara. Untuk menerapkan pengurangan dimensi pada dataset HAR, kami akan menggunakan Proyektor Gaussian Random Projector sebagai bagian dari pipeline kami. Gaussian Random Projector menerapkan transformasi linear acak yang diambil dari distribusi Gaussian ke matriks sampel. Kami akan menetapkan jumlah target dimensi ke 110 yang kurang dari 20% dari dimensi input asli.

Terakhir, kami akan memusatkan dan mengukur dataset menggunakan Z Scale Standardizer bahwa nilai-nilai fitur memiliki 0 mean dan varians unit. Langkah terakhir ini akan membantu trainer selesai dengan kesimpulan lebih cepat selama training.

Kami akan membungkus transformasi ini dalam sebuah Pipeline sehingga alat kelengkapan mereka dapat bertahan bersama dengan model.

Memulai The Learner

Sekarang, kita akan mengalihkan perhatian kita ke pengaturan parameter trainer. Softmax Classifier adalah jenis jaringan saraf single layer dengan Softmax output layer. Pelatihan dilakukan secara iteratif menggunakan Mini Batch Gradient Descent di mana pada setiap parameter model mengambil langkah ke arah minimum dari kesalahan gradien yang dihasilkan oleh fungsi biaya yang ditentukan pengguna seperti Cross Entropy.

Parameter hyper-pertama Softmax Classifier adalah ukuran batch yang mengontrol jumlah sampel yang dimasukkan ke dalam jaringan pada suatu waktu. Ukuran bets diperdagangkan dari kecepatan pelatihan untuk kelancaran estimasi gradien. Ukuran batch 256 berfungsi cukup baik untuk contoh ini sehingga kami akan memilih nilai itu tetapi jangan ragu untuk bereksperimen dengan pengaturan lain dari ukuran batch Anda sendiri.

Parameter-hiper berikutnya adalah Gradient Descent optimizer dan learning rate terkait. Itu Momentum optimizer adalah optimizer adaptif yang menambah kekuatan momentum untuk setiap pembaruan parameter. Momentum membantu mempercepat pelatihan dengan melintasi gradien lebih cepat. Ini menggunakan tingkat pembelajaran global yang dapat diatur oleh pengguna dan biasanya berkisar antara 0,1 hingga 0,0001. Pengaturan default 0,001 berfungsi dengan baik untuk contoh ini sehingga kami akan membiarkannya.

use Rubix\ML\PersistentModel;
use Rubix\ML\Pipeline;
use Rubix\ML\Transformers\GaussianRandomProjector;
use Rubix\ML\Transformers\ZScaleStandardizer;
use Rubix\ML\Classifiers\SoftmaxClassifier;
use Rubix\ML\NeuralNet\Optimizers\Momentum;
use Rubix\ML\Persisters\Filesystem;

$estimator = new PersistentModel(
    new Pipeline([
        new GaussianRandomProjector(110),
        new ZScaleStandardizer(),
    ], new SoftmaxClassifier(256, new Momentum(0.001))),
    new Filesystem('har.model')
);

Kami akan membungkus seluruh pipeline dalam sebuah Persistent Model meta-estimator yang menambahkan metode save () dan load () ke estimator basis. Model Persistent membutuhkan sebuah Persister objek untuk mengatakan di mana menyimpan data model serial. Filesystem persister menyimpan dan memuat data model ke file yang terletak di jalur yang ditentukan pengguna dalam penyimpanan.

Mengatur Logger

Karena Softmax Classifier mengimplementasikan Verbose antarmuka, kita bisa mencatat kemajuan pelatihan secara real-time. Untuk mengatur logger, masukkan sebuah PSR-3 instance logger yang kompatibel dengan metode setLogger () pada instance pelajar. Screen logger yang disertakan dengan Rubix ML adalah pilihan default yang bagus jika Anda hanya perlu sesuatu yang sederhana untuk di-output ke konsol.

use Rubix\ML\Other\Loggers\Screen;

$estimator->setLogger(new Screen('HAR'));

Training

mulailah melatih pelajar, panggil metode train () pada instance dengan dataset pelatihan sebagai argumen.

$estimator->train($dataset);

Training Loss

Selama pelatihan, pelajar akan mencatat kehilangan pelatihan di setiap waktu yang dapat kita plot untuk memvisualisasikan kemajuan pelatihan. Kehilangan pelatihan adalah nilai dari fungsi biaya di setiap zaman dan dapat diinterpretasikan sebagai jumlah kesalahan yang tersisa dalam model setelah langkah pembaruan. Untuk mengembalikan array dengan nilai fungsi biaya pada setiap zaman, panggil metode steps () pada trainer.

$losses = $estimator->steps();

Ini adalah contoh plot garis fungsi biaya Entropi Silang dari sesi pelatihan. Seperti yang Anda lihat, model belajar dengan cepat selama zaman awal dengan pelatihan yang lebih lambat mendekati tahap akhir saat pelajar memperbaiki parameter model.

Cross Entropy Loss

Saving

Karena kita membungkus estimator dalam pembungkus Model Persisten, kita dapat menyimpan model dengan memanggil metode save () pada instance estimator.

$estimator->save();

Untuk menjalankan skrip pelatihan, panggil dari baris perintah seperti ini.

$ php train.php

Cross Validation

Penulis dataset memberikan 2.947 sampel pengujian berlabel tambahan yang akan kami gunakan untuk menguji model. Kami telah mengadakan sampel ini sampai sekarang karena kami ingin dapat menguji model pada sampel yang belum pernah dilihat sebelumnya. Mulailah dengan mengekstraksi sampel pengujian dan label kebenaran dari file test.ndjson.

Note: Kode sumber untuk contoh ini dapat ditemukan di validate.php file folder root.

use Rubix\ML\Datasets\Labeled;
use Rubix\ML\Extractors\NDJSON;

$dataset = Labeled::fromIterator(new NDJSON('test.ndjson'));

Load Model from Storage

Untuk memuat pipa estimator / transformator yang kami instantiated sebelumnya, panggil metode static load () pada Persistent Model kelas dengan instance Persister yang menunjuk ke model dalam penyimpanan.

use Rubix\ML\PersistentModel;
use Rubix\ML\Persisters\Filesystem;

$estimator = PersistentModel::load(new Filesystem('har.model'));

Membuat Prediksi

Untuk mendapatkan prediksi dari model, berikan set pengujian ke metode predict () pada instance estimator.

$predictions = $estimator->predict($dataset);

Generate report

Laporan validasi silang memberikan statistik terperinci tentang kinerja model yang diberi label ground-truth. Multiclass Breakdown laporan memecah kinerja model di tingkat kelas dan metrik output seperti akurasi, presisi, penarikan, dan banyak lagi. Confusion Matrix adalah tabel yang membandingkan label yang diprediksi dengan label yang sebenarnya untuk ditampilkan jika model mengalami kesulitan memprediksi kelas tertentu. Kami akan membungkus kedua laporan dalam Aggregate Report sehingga kami dapat menghasilkan kedua laporan sekaligus.

use Rubix\ML\CrossValidation\Reports\AggregateReport;
use Rubix\ML\CrossValidation\Reports\MulticlassBreakdown;
use Rubix\ML\CrossValidation\Reports\ConfusionMatrix;

$report = new AggregateReport([
    new MulticlassBreakdown(),
    new ConfusionMatrix(),
]);

Now, buat laporan menggunakan prediksi dan label dari set pengujian.

$results = $report->generate($predictions, $dataset->labels());

Untuk menjalankan skrip validasi, masukkan perintah berikut di prompt perintah.

$ php validate.php

Output dari laporan harus terlihat seperti output di bawah ini. Kerja bagus! Seperti yang Anda lihat, penaksir kami adalah sekitar 97% akurat dan memiliki spesifisitas yang sangat baik dan nilai prediksi negatif.

[
    {
        "overall": {
            "accuracy": 0.9674308943546821,
            "precision": 0.9063809316861989,
            "recall": 0.9048187793615003,
            "specificity": 0.9802554195397294,
            "negative_predictive_value": 0.9803712249716344,
            "false_discovery_rate": 0.09361906831380108,
            "miss_rate": 0.09518122063849947,
            "fall_out": 0.019744580460270538,
            "false_omission_rate": 0.01962877502836563,
            "f1_score": 0.905257137386163,
            "mcc": 0.8858111380161123,
            "informedness": 0.8850741989012301,
            "markedness": 0.8867521566578332,
            "true_positives": 2675,
            "true_negatives": 13375,
            "false_positives": 272,
            "false_negatives": 272,
            "cardinality": 2947
        },
    }

]

Next Steps

Sekarang setelah Anda menyelesaikan tutorial tentang mengklasifikasikan aktivitas manusia menggunakan Softmax Classifier, lihat apakah Anda dapat mencapai hasil yang lebih baik dengan menyempurnakan beberapa parameter hiper. Lihat seberapa besar reduksi dimensi memengaruhi akurasi akhir estimator dengan mengeluarkan Gaussian Random Projector dari pipa. Apakah ada teknik pengurangan dimensi lain yang bekerja lebih baik?

Original Dataset

Contact: Jorge L. Reyes-Ortiz (1,2), Davide Anguita (1), Alessandro Ghio (1), Luca Oneto (1) and Xavier Parra (2) Institutions: 1 - Smartlab - Non-Linear Complex Systems Laboratory Laboratory DITEN - University of Genoa, Genoa (I-16145), Italy. 2 - CETpD - Technical Research Center for Dependency Care and Autonomous Living Polytechnic University of Catalonia (BarcelonaTech). Vilanova i la Geltrú (08800), Spain activityrecognition '@' smartlab.ws

References:

  • Davide Anguita, Alessandro Ghio, Luca Oneto, Xavier Parra dan Jorge L. Reyes-Ortiz. Kumpulan Data Domain Publik untuk Pengakuan Aktivitas Manusia Menggunakan Ponsel Cerdas. Simposium Eropa ke-21 tentang Jaringan Syaraf Tiruan, Inteligensi Komputasi dan Pembelajaran Mesin, ESANN 2013. Bruges, Belgia 24-26 April 2013.

License

Kode ini dilisensikan MIT dan tutorialnya berlisensi CC BY-NC 4.0.

har's People

Contributors

andrewdalpino avatar fliw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.