ساخت یک خط لوله یادگیری ماشین
پاکسازی، مقیاسبندی، آموزش، ارزیابی و ذخیره یک مدل رگرسیون را ترکیب کن.
۱۵۰ دقیقه · ۳۵۰ XP · Python · Scikit-learn · Evaluation
هدف و راهنمای انجام
جداسازی آموزش و ارزیابی و سنجش تعمیم مدل
ورودی
train: لیست سطرهای دارای price؛ test: لیست ویژگیهای بدون هدف؛ features: ['age', 'distance', 'stores', 'latitude', 'longitude']؛ target: price
خروجی
result.json شامل predictions با یک مقدار بهازای هر سطر test؛ عدد برای رگرسیون و برچسب موجود در train برای دستهبندی. model.json با پارامترهای عددی مدل و پیشپردازش.
- request.json شامل train دارای برچسب و test بدون برچسب است؛ فایل CSV محلی برای مطالعه است و در ارزیابی به محیط ارسال نمیشود.
- train را به ویژگیها و target جدا کن؛ داده ارزیابی بیرونی را هرگز برای fit استفاده نکن.
- از SimpleImputer(strategy="median")، StandardScaler و Ridge در Pipeline استفاده کن؛ چند خانه عددی train/test در ارزیابی null هستند.
- برای تمرین، با train_test_split و random_state=42 بخشی از train را نگه دار و مدل را با MAE یا accuracy/F1 بسنج.
- مدل یا Pipeline را فقط روی داده آموزش fit کن؛ سپس برای تمام سطرهای test پیشبینی کن.
- predictions را به ترتیب test در result.json ذخیره کن؛ امتیاز نهایی را داور روی برچسبهای خارج محیط محاسبه میکند.
- 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
نسخه محلی همراه پروژه؛ ۴۱۴ ردیف. هنگام اجرا دانلود خارجی لازم نیست.
