SEFR: Ultra Düşük Güçlü Cihazlar için Hızlı Doğrusal Zamanlı Sınıflandırıcı
Gömülü senaryolar için mükemmel, küçük ve doğru yepyeni bir ikili sınıflandırıcı: minimum bellek ayak izi ile kolayca 90%+ doğruluk elde edin!
SEFR: Ultra Düşük Güçlü Cihazlar için Hızlı Doğrusal Zamanlı Sınıflandırıcı, yazarların ikili bir sınıflandırıcı geliştirdiği Hamidreza Keshavarz, Mohammad Saniee Abadeh, Reza Rawassizadeh’den bir makaledir:
- Öğrenme sırasında hızlı
- Tahmin sırasında hızlı
- Minimum bellek gerektirir
Gömülü makine öğrenimi için özel olarak tasarlanmıştır, bu nedenle mikro denetleyicilerde çalıştırmak için herhangi bir optimizasyon gerekmez: tasarım gereği küçüktür. Kısacası, pozitif ve negatif sınıf arasında ayrım yapmak için özelliklerin ortalamalarının ağırlıklar artı bir önyargı olarak bir kombinasyonunu kullanır. Makaleyi okursanız, kesinlikle anlayacaksınız.
Nasıl Kullanılır
Yazarlar, okuyabileceğiniz Github’da hem C hem de Python uygulaması sağladı.
İşte bir Python örneği.
from sefr import SEFR from sklearn.datasets import load_iris from sklearn.preprocessing import normalize from sklearn.model_selection import train_test_split if __name__ == '__main__': iris = load_iris() X = normalize(iris.data) y = iris.target X = X[y < 2] y = y[y < 2] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) clf = SEFR() clf.fit(X_train, y_train) print('accuracy', (clf.predict(X_test) == y_test).sum() / len(y_test))
Sonuçlar:
Veri kümesi | Özellik sayısı | Kesinlik |
---|---|---|
İris | 4 | 100% |
Meme kanseri | 30 | %89 |
Wine | 13 | %84 |
Rakamlar | 64 | %99 |
Modelin özellik başına sadece 1 ağırlığa ihtiyaç duyduğunu düşünürsek, bu sonuçların etkileyici olduğunu düşünüyoruz.
Mikromlgen Entegrasyonu
from sefr import SEFR from sklearn.datasets import load_iris from micromlgen import port if __name__ == '__main__': iris = load_iris() X = iris.data y = iris.target X = X[y < 2] y = y[y < 2] clf = SEFR() clf.fit(X_train, y_train) print(port(clf))
#pragma once namespace Eloquent { namespace ML { namespace Port { class SEFR { public: /** * Predict class for features vector */ int predict(float *x) { return dot(x, 0.084993602632 , -0.106163278477 , 0.488989863684 , 0.687022900763 ) <= 2.075 ? 0 : 1; } protected: /** * Compute dot product between features vector and classifier weights */ float dot(float *x, ...) { va_list w; va_start(w, 4); float kernel = 0.0; for (uint16_t i = 0; i < 4; i++) { kernel += x[i] * va_arg(w, double); } return kernel; } }; } } }
Arduino çiziminizde:
#include "IrisSEFR.h" #include "IrisTest.h" void setup() { Serial.begin(115200); } void loop() { Eloquent::ML::Port::SEFR clf; Eloquent::ML::Test::IrisTestSet testSet; testSet.test(clf); Serial.println(testSet.dump()); delay(5000); }
Kodu derlemek için Github örneğini klonlamanız gerekir.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.