Bu makalenin makine öğrenimi modellerinde kullanıcı tanıma için kullanılan tuş vuruşu dinamikleri davranışsal biyometridir. Tuş vuruşu dinamikleri, her kişinin kimliğini doğrulamak için yazdığı farklı yöntemi kullanır. Bu, Tuşa Basma ve Tuş Bırakma sırasındaki 2 tuş vuruşu olayının analiz edilmesiyle gerçekleştirilir; bunlar, bilgisayar klavyelerinde yazma kalıplarını çıkarmak için bir tuş vuruşunu oluşturur. Makale, bu ML Modellerinin gerçek hayattaki durumlarda bir kullanıcıyı tahmin etmek için nasıl kullanılabileceğini inceleyecektir.
Önceki makalede, aynı metni 12 kez yazması istenen 100 kullanıcıdan gelen +880 klavye girişi kümesinde 3 ML modelini nasıl eğitebileceğimiz açıklanıyordu.
Gerçek hayattaki bir durumu simüle etmek için kullanacağımız uygulamalar.
Sandbox : Gerçek hayat senaryolarını test etmek için kullanacağız
Üretim : Bu uygulamayı üretime taşımak istediğimizde, Flask kodunun bitlerini basit bir kodla değiştirebiliriz.
Flask, Lambda + API Ağ Geçidini kopyalamak için kullanabileceğimiz bir web çerçevesidir.
Lambda, AWS'de barındırılan ve çeşitli dillerde yazılmış olay odaklı kodları çalıştırabilen sunucusuz bir web hizmetidir ancak bu uygulama için python kullanacağız.
Veri akışı şöyledir:
Daha önce de belirtildiği gibi Github proje sayfasında bulabileceğiniz tüm kodlar:
https://github.com/BogdanAlinTudorache/KeystrokeDynamics
{ "info": { "_postman_id": "c62ddbda-e487-432f-998a-4dfc9313f0fa", "name": "BogdanTudorache", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "item": [ { "name": "predict_user", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n \"Model\": \"RF\",\n \"HT\": {\n \"Mean\": 48.43,\n \"STD\": 23.34\n },\n \"PPT\": {\n \"Mean\": 120.43,\n \"STD\": 37.41\n },\n \"RRT\": {\n \"Mean\": 124.43,\n \"STD\": 45.34\n },\n \"RPT\": {\n \"Mean\": 132.56,\n \"STD\": 47.12\n }\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "http://127.0.0.1:5000", "protocol": "http", "host": [ "127", "0", "0", "1" ], "port": "5000" } }, "response": [] } ] }
Dosyayı GitHub'dan indirebilirsiniz.
{ "Model": "RF", "HT": { "Mean": 48.43, "STD": 23.34 }, "PPT": { "Mean": 120.43, "STD": 37.41 }, "RRT": { "Mean": 124.43, "STD": 45.34 }, "RPT": { "Mean": 132.56, "STD": 47.12 } }
Her şeyi AWS'ye taşımadan önce süreci korumalı alanda test etmek istiyorsak Flask'ı kullanarak uçtan uca bir çağrıyı çoğaltmamız gerekir.
GitHub'da flask_lambda_function.py'nin tam sürümünü bulacaksınız ve herhangi bir IDE'de flask uygulamasını otomatik olarak başlatacağından betiği çalıştırmanız yeterlidir.
Benim durumumda IntelliJ Idea kullanıyorum, bu yüzden betiği çalıştırıyorum (sağ tıklayın → çalıştır):
IDE'nin alt kısmında komut dosyası başlatıldığında, web hizmetinin localhost ve bağlantı noktası 5000'de başladığını bildiren python konsolunu göreceksiniz (bunun varsayılan olduğunu düşünüyorum ancak bu da yapılandırılabilir).
Artık her POST HTTP isteği yaptığımızda, gerçek hayat senaryosunu simüle ederek flask uygulamasını tetiklemiş olacağız.
@app.route('/', methods=['GET', 'POST']) def index(): # Bellow code should be uncommented when running in AWS:Lambda # above should be commented as well as flask import + app definition # def lambda_handler(event, context): """ Lambda handler: When a request hits the API gateway linked to this lambda_function this is the function that gets called. The request data is passed as the event variable which is a dictionary object, in this case it the json of the POST request from which we extract the body details """ # Parses the details from the POST request: extracts model and input data # Based on model it imports the trained model from local # Outputs the predicted user based on input data try: prediction = functions.predict_user(request.get_json()) # Below code should be uncommented when running from AWS, above should be commented. # prediction = functions.predict_user(event) return jsonify({'statuscode': 200, 'status': 'success', 'predicted user': str(prediction) }) except Exception as e: return jsonify({'statuscode': 400, 'status': 'error', 'message': str(e)})
Yukarıdaki kod flask-app olarak ayarlanmıştır ancak belirli satırlara yorum yaparak ve açıklamaları kaldırarak kolayca Lambda'ya geçebilirsiniz.
Yapısı çok basittir; biz sadece tahmin_user() adında başka bir işlevi çağırıyoruz ve POST isteğinden json gövdesini girdi olarak sağlıyoruz.
def predict_user(event): """ Gets the input details from the body of the POST request and returns the predicted user """ # Print the event for debugging purposes print(event) # Check if the message has the correct body structure if ['Model', 'HT', 'PPT', 'RRT', 'RPT'] == list(event.keys()): print(f"Model is:", event['Model']) if event["Model"] == "SVM": # Load the trained SVM model from the joblib file model_path = os.path.join(basedir, 'models', 'svm_model.joblib') model = joblib.load(model_path) elif event["Model"] == "RF": # Load the trained Random Forest model from the joblib file model_path = os.path.join(basedir, 'models', 'rf_model.joblib') model = joblib.load(model_path) elif event["Model"] == "XGBoost": # Load the trained XGBoost model from the joblib file model_path = os.path.join(basedir, 'models', 'xgb_model.joblib') model = joblib.load('model_path') # Extract the features from the event dictionary features = [ event['HT']['Mean'], event['HT']['STD'], event['PPT']['Mean'], event['PPT']['STD'], event['RRT']['Mean'], event['RRT']['STD'], event['RPT']['Mean'], event['RPT']['STD'] ] # Make a prediction using the loaded model and the extracted features prediction = model.predict([features]) # Return the predicted user return prediction[0]
Bu işlev, önceden eğitilmiş belirli ML modelini yüklemeye karar verdiğimiz model parametresine bağlı olarak basit bir şekilde yazılmıştır.
Önceden eğitilmiş model ile kullanıcı tahminini yapıyoruz ve bunu talep sahibine geri gönderiyoruz. ( son Postacı yanıt fotoğrafına bakın )
Modellerin eğitimi bu makalenin I. bölümünde yapılmıştır, yukarıdaki bağlantıya bakın .
Makaleyi beğendiyseniz ve bana destek olmak istiyorsanız şunları yaptığınızdan emin olun:
🔔 Beni takip et Bogdan Tudorache