Machine Learning · کاربردی

ساخت یک خط لوله یادگیری ماشین

پاک‌سازی، مقیاس‌بندی، آموزش، ارزیابی و ذخیره یک مدل رگرسیون را ترکیب کن.

۱۵۰ دقیقه · ۳۵۰ XP · Python · Scikit-learn · Evaluation

هدف و راهنمای انجام

جداسازی آموزش و ارزیابی و سنجش تعمیم مدل

ورودی

train: لیست سطرهای دارای price؛ test: لیست ویژگی‌های بدون هدف؛ features: ['age', 'distance', 'stores', 'latitude', 'longitude']؛ target: price

خروجی

result.json شامل predictions با یک مقدار به‌ازای هر سطر test؛ عدد برای رگرسیون و برچسب موجود در train برای دسته‌بندی. model.json با پارامترهای عددی مدل و پیش‌پردازش.

  1. request.json شامل train دارای برچسب و test بدون برچسب است؛ فایل CSV محلی برای مطالعه است و در ارزیابی به محیط ارسال نمی‌شود.
  2. train را به ویژگی‌ها و target جدا کن؛ داده ارزیابی بیرونی را هرگز برای fit استفاده نکن.
  3. از SimpleImputer(strategy="median")، StandardScaler و Ridge در Pipeline استفاده کن؛ چند خانه عددی train/test در ارزیابی null هستند.
  4. برای تمرین، با train_test_split و random_state=42 بخشی از train را نگه دار و مدل را با MAE یا accuracy/F1 بسنج.
  5. مدل یا Pipeline را فقط روی داده آموزش fit کن؛ سپس برای تمام سطرهای test پیش‌بینی کن.
  6. predictions را به ترتیب test در result.json ذخیره کن؛ امتیاز نهایی را داور روی برچسب‌های خارج محیط محاسبه می‌کند.
  7. model.json را شامل median, mean, scale, coef (لیست به ترتیب features) و intercept ذخیره کن؛ فرمول پیش‌بینی ((x−mean)/scale)·coef+intercept است. بردار median برای null به کار می‌رود.

تقسیم داده را داور هم مستقل انجام می‌دهد؛ موفقیت صرف اجرای برنامه یا metric چاپ‌شده کافی نیست. random_state=42 را برای بازتولیدپذیری تنظیم کن.

مثال ورودی و خروجی

{
    "input": {
        "train": [
            {
                "age": 17.1,
                "distance": 967.4,
                "stores": 4,
                "latitude": 24.98872,
                "longitude": 121.53408,
                "price": 40
            },
            {
                "age": 36.6,
                "distance": 488.8193,
                "stores": 8,
                "latitude": 24.97015,
                "longitude": 121.54494,
                "price": 38.3
            },
            {
                "age": 15.7,
                "distance": 815.9314,
                "stores": 4,
                "latitude": 24.97886,
                "longitude": 121.53464,
                "price": 38.1
            },
            {
                "age": 22.8,
                "distance": 707.9067,
                "stores": 2,
                "latitude": 24.981,
                "longitude": 121.54713,
                "price": 36.6
            },
            {
                "age": 15.2,
                "distance": 461.1016,
                "stores": 5,
                "latitude": 24.95425,
                "longitude": 121.5399,
                "price": 34.6
            },
            {
                "age": 3.1,
                "distance": 383.8624,
                "stores": 5,
                "latitude": 24.98085,
                "longitude": 121.54391,
                "price": 56.2
            },
            {
                "age": 22.2,
                "distance": 379.5575,
                "stores": 10,
                "latitude": 24.98343,
                "longitude": 121.53762,
                "price": 44
            },
            {
                "age": 16.3,
                "distance": 4066.587,
                "stores": 0,
                "latitude": 24.94297,
                "longitude": 121.50342,
                "price": 20.5
            },
            {
                "age": 38,
                "distance": 461.7848,
                "stores": 0,
                "latitude": 24.97229,
                "longitude": 121.53445,
                "price": 35.7
            },
            {
                "age": 15.6,
                "distance": 289.3248,
                "stores": 5,
                "latitude": 24.98203,
                "longitude": 121.54348,
                "price": 46.1
            },
            {
                "age": 21.7,
                "distance": 463.9623,
                "stores": 9,
                "latitude": 24.9703,
                "longitude": 121.54458,
                "price": 42
            },
            {
                "age": 31.5,
                "distance": 258.186,
                "stores": 9,
                "latitude": 24.96867,
                "longitude": 121.54331,
                "price": 36.3
            },
            {
                "age": 16.2,
                "distance": 2288.011,
                "stores": 3,
                "latitude": 24.95885,
                "longitude": 121.51359,
                "price": 24.4
            },
            {
                "age": 12.7,
                "distance": 187.4823,
                "stores": 1,
                "latitude": 24.97388,
                "longitude": 121.52981,
                "price": 28.5
            },
            {
                "age": 27.6,
                "distance": 515.1122,
                "stores": 5,
                "latitude": 24.96299,
                "longitude": 121.5432,
                "price": 37.4
            },
            {
                "age": 2.7,
                "distance": 533.4762,
                "stores": 4,
                "latitude": 24.97445,
                "longitude": 121.54765,
                "price": 53.9
            },
            {
                "age": 1.8,
                "distance": 1455.798,
                "stores": 1,
                "latitude": 24.9512,
                "longitude": 121.549,
                "price": 27
            },
            {
                "age": 37.3,
                "distance": 587.8877,
                "stores": 8,
                "latitude": 24.97077,
                "longitude": 121.54634,
                "price": 37.4
            },
            {
                "age": 0,
                "distance": 185.4296,
                "stores": 0,
                "latitude": 24.9711,
                "longitude": 121.5317,
                "price": 55.3
            },
            {
                "age": 40.1,
                "distance": 123.7429,
                "stores": 8,
                "latitude": 24.97635,
                "longitude": 121.54329,
                "price": 44.3
            },
            {
                "age": 7.1,
                "distance": 2175.03,
                "stores": 3,
                "latitude": 24.96305,
                "longitude": 121.51254,
                "price": 32.1
            },
            {
                "age": 25.9,
                "distance": 4519.69,
                "stores": 0,
                "latitude": 24.94826,
                "longitude": 121.49587,
                "price": 22.1
            },
            {
                "age": 16.9,
                "distance": 4066.587,
                "stores": 0,
                "latitude": 24.94297,
                "longitude": 121.50342,
                "price": 18.3
            },
            {
                "age": 30.3,
                "distance": 4510.359,
                "stores": 1,
                "latitude": 24.94925,
                "longitude": 121.49542,
                "price": 22.6
            },
            {
                "age": 15.6,
                "distance": 1756.411,
                "stores": 2,
                "latitude": 24.9832,
                "longitude": 121.51812,
                "price": 27.3
            },
            {
                "age": 12.2,
                "distance": 1360.139,
                "stores": 1,
                "latitude": 24.95204,
                "longitude": 121.54842,
                "price": 30.1
            },
            {
                "age": 30.9,
                "distance": 6396.283,
                "stores": 1,
                "latitude": 24.94375,
                "longitude": 121.47883,
                "price": 12.2
            },
            {
                "age": 3.5,
                "distance": 757.3377,
                "stores": 3,
                "latitude": 24.97538,
                "longitude": 121.54971,
                "price": 36.7
            },
            {
                "age": 12.2,
                "distance": 1360.139,
                "stores": 1,
                "latitude": 24.95204,
                "longitude": 121.54842,
                "price": 26.6
            },
            {
                "age": 17.3,
                "distance": 444.1334,
                "stores": 1,
                "latitude": 24.97501,
                "longitude": 121.5273,
                "price": 43.9
            },
            {
                "age": 9.9,
                "distance": 279.1726,
                "stores": 7,
                "latitude": 24.97528,
                "longitude": 121.54541,
                "price": 57.4
            },
            {
                "age": 10.3,
                "distance": 211.4473,
                "stores": 1,
                "latitude": 24.97417,
                "longitude": 121.52999,
                "price": 45.3
            },
            {
                "age": 15.9,
                "distance": 289.3248,
                "stores": 5,
                "latitude": 24.98203,
                "longitude": 121.54348,
                "price": 42.1
            },
            {
                "age": 26.4,
                "distance": 335.5273,
                "stores": 6,
                "latitude": 24.9796,
                "longitude": 121.5414,
                "price": 38.1
            },
            {
                "age": 30.7,
                "distance": 1264.73,
                "stores": 0,
                "latitude": 24.94883,
                "longitude": 121.52954,
                "price": 18.3
            },
            {
                "age": 8,
                "distance": 2216.612,
                "stores": 4,
                "latitude": 24.96007,
                "longitude": 121.51361,
                "price": 23.9
            },
            {
                "age": 12,
                "distance": 1360.139,
                "stores": 1,
                "latitude": 24.95204,
                "longitude": 121.54842,
                "price": 28.9
            },
            {
                "age": 12.8,
                "distance": 1449.722,
                "stores": 3,
                "latitude": 24.97289,
                "longitude": 121.51728,
                "price": 21.4
            },
            {
                "age": 21.7,
                "distance": 512.5487,
                "stores": 4,
                "latitude": 24.974,
                "longitude": 121.53842,
                "price": 44.2
            },
            {
                "age": 31.3,
                "distance": 1758.406,
                "stores": 1,
                "latitude": 24.95402,
                "longitude": 121.55282,
                "price": 20.7
            }
        ],
        "test": [
            {
                "age": 25.3,
                "distance": 2707.392,
                "stores": 3,
                "latitude": 24.96056,
                "longitude": 121.50831
            },
            {
                "age": 17.3,
                "distance": 2261.432,
                "stores": 4,
                "latitude": 24.96182,
                "longitude": 121.51222
            },
            {
                "age": 11.9,
                "distance": 1360.139,
                "stores": 1,
                "latitude": 24.95204,
                "longitude": 121.54842
            }
        ],
        "features": [
            "age",
            "distance",
            "stores",
            "latitude",
            "longitude"
        ],
        "target": "price"
    },
    "output": {
        "predictions": [
            "برچسب یا عدد برای هر سطر test"
        ]
    }
}

معیارهای موفقیت

  • MAE حداکثر 9.0
  • شکل و تعداد و نوع پیش‌بینی‌ها مطابق ورودی
  • ارزیابی روی دو تقسیم تصادفی مستقل؛ برچسب test به کد ارسال نمی‌شود.
  • بازیابی عددی model.json بدون اجرای pickle؛ پیش‌بینی بازسازی‌شده باید با result.json برابر باشد.

کتابخانه‌ها: pandas, scikit-learn, numpy

منبع و وضعیت دیتاست‌ها

housing.csv · CC BY 4.0 · Yeh, I. (2018), Real Estate Valuation, UCI, doi:10.24432/C5J30W. Header names normalized; price is per unit area.

https://archive.ics.uci.edu/static/public/477/real+estate+valuation+data+set.zip

نسخه محلی همراه پروژه؛ ۴۱۴ ردیف. هنگام اجرا دانلود خارجی لازم نیست.

برای نوشتن و اجرای کد وارد شوید