دریافت و پردازش دادهها
زباله وارد کنید، زباله خارج می کنید
این جمله توی تحلیل دادهها خیلی درسته. چون دقت تحلیل ما کاملاً به کیفیت دادههایی که استفاده میکنیم بستگی داره. اگه دادههای بیکیفیت وارد کنیم، انتظار نداشته باشید که نتایج باکیفیتی بگیریم.
برای همین، تحلیلگران داده و مهندسهای یادگیری ماشین زمان زیادی رو صرف دریافت و پردازش دادههای باکیفیت میکنن. برای این کار، دادهها باید به فرمتی باشن که قابل استفاده برای تحلیل و مقاصد دیگه باشن. بعدش هم باید دادهها به درستی پردازش بشن تا بتونیم الگوریتمها رو روی اونها اعمال کنیم و مطمئن بشیم که تحلیلهامون درسته.
فایلهای CSV
فایلهای CSV شاید رایجترین فرمت دادهای باشن که توی علوم داده و یادگیری ماشین باهاش مواجه میشید (خصوصاً وقتی از پایتون استفاده میکنید). CSV یعنی مقادیر جدا شده با کاما. مقادیر در ستونهای مختلف با کاما جدا میشن. اینجا یه مثال هست:
Product, Price cabbage,6.8 lettuce,7.2 tomato,4.2
این یه مثال ساده دو ستونی بود. توی پروژههای مدرن تحلیل داده، ممکنه چیزی شبیه این باشه:
RowNumber,CustomerId,Surname,CreditScore,Geography,Gender,Age,Tenure,.... 1,15634602,Hargrave,619,France,Female,42,2,0,1,1,1,101348.88,1 2,15647311,Hill,608,Spain,Female,41,1,83807.86,1,0,1,112542.58,0 3,15619304,Onio,502,France,Female,42,8,159660.8,3,1,0,113931.57,1 ...
دادههای واقعی (خصوصاً در تجارت الکترونیک، شبکههای اجتماعی و تبلیغات آنلاین) ممکنه میلیونها سطر و هزاران ستون داشته باشن.
فایلهای CSV کار کردن باهاشون راحت هست و میتونید به راحتی تعداد زیادی از این فایلها رو از منابع آنلاین مختلف پیدا کنید. این فایلها ساختار یافته هستن و پایتون هم به راحتی اجازه پردازش اونها رو میده با نوشتن چند خط کد:
import pandas as pd dataset = pd.read_csv('Data.csv')
این مرحله اغلب ضروریه قبل از اینکه پایتون و کامپیوترتون بتونن روی دادهها کار کنن. پس هر وقت با فایل CSV کار میکنید و از پایتون استفاده میکنید، خوبه که اون دو خط کد رو در ابتدای پروژهتون داشته باشید.
بعدش، مقادیر ورودی (X) و مقادیر خروجی (y) رو تنظیم میکنیم. اغلب، مقادیر y هدفهای خروجی ما هستن. برای مثال، هدف معمول اینه که یاد بگیریم چطور مقادیر خاصی از X روی مقادیر y مربوطه تأثیر میذارن. بعداً، اون یادگیری رو میتونیم روی مقادیر جدید X اعمال کنیم و ببینیم آیا اون یادگیری توی پیشبینی مقادیر y مفیده یا نه (که ابتدا ناشناخته هستن).
مقیاسبندی ویژگیها
بعد از اینکه دادهها قابل خواندن و استفاده شدن، اغلب مرحله بعدی اینه که مطمئن بشیم مقادیر در مقیاس و اندازه مشابهی هستن. چون مقادیر در برخی ستونها ممکنه در یک لیگ متفاوت نسبت به بقیه باشن. مثلاً، سن مشتریان میتونه بین 18 تا 70 باشه. اما محدوده درآمد بین 100000 تا 9000000 هست. تفاوت در محدودههای دو ستون تأثیر زیادی روی مدل ما داره. شاید محدوده درآمد تأثیر زیادی روی نتایج پیشبینی داشته باشه به جای اینکه هر دو، سن و درآمد، به صورت مساوی مورد توجه قرار بگیرن.
برای انجام مقیاسبندی ویژگیها، یکی از روشها استفاده از کد زیر هست:
from sklearn.preprocessing import StandardScaler sc_X = StandardScaler() X_train = sc_X.fit_transform(X_train) X_test = sc_X.transform(X_test)
هدف اینه که مقادیر رو در یک مقیاس مشابه قرار بدیم تا همه مقادیر از ستونها یا ویژگیهای مختلف به پیشبینیها و خروجیها کمک کنن.
تقسیم دادهها به مجموعهی آموزشی و آزمایشی
در تحلیل داده و یادگیری ماشین، اغلب یک نیاز عمومی اینه که مجموعه داده رو به مجموعه آموزشی و آزمایشی تقسیم کنیم. چون باید یه مدل بسازیم و عملکرد و دقت اون رو تست کنیم. ما از مجموعه آموزشی استفاده میکنیم تا کامپیوترمون از دادهها یاد بگیره. بعدش، از اون یادگیری در مقابل مجموعه آزمایشی استفاده میکنیم و میبینیم آیا عملکردش کافی هست یا نه.
یک روش معمول برای انجام این کار با کد زیر هست:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
اینجا، ما چیزی رو از scikit-learn (کتابخانهی رایگان یادگیری ماشین برای زبان برنامهنویسی پایتون) وارد میکنیم و یه تقسیم روی مجموعه داده انجام میدیم. این تقسیم اغلب 80% مجموعه آموزشی و 20% مجموعه آزمایشی هست (test_size=0.2). مقدار random_state میتونه هر عددی باشه به شرط اینکه در بخشهای بعدی پروژهتون ثابت بمونه.
شما واقعاً میتونید از نسبتهای مختلف برای تقسیم مجموعه دادهتون استفاده کنید. بعضیها از نسبت 70-30 یا حتی 60-40 استفاده میکنن. فقط به خاطر داشته باشید که مجموعه آموزشی باید به اندازه کافی بزرگ باشه تا هر چیزی که معناداره رو یاد بگیره.
جمعبندی
به همین خاطر توصیه میشه که دادههای بیشتری جمع کنید تا “یادگیری” دقیقتر باشه. با دادههای کم، سیستم ما ممکنه نتونه الگوها رو تشخیص بده. الگوریتم ما حتی ممکنه روی دادههای محدود بیش از حد عمومی بشه، که باعث میشه الگوریتم روی دادههای جدید کار نکنه. به عبارت دیگه، نتایج عالی رو وقتی از دادههای موجود استفاده میکنیم نشون میده، اما وقتی از دادههای جدید استفاده میشه به طرز فجیعی شکست میخوره.
مواردی هم هست که ما از قبل مقدار کافی از دادهها برای یادگیری معنادار داریم. اغلب نیازی به جمعآوری دادههای بیشتر نداریم چون تأثیرش ممکنه ناچیز باشه (مثل بهبود دقت 0.0000001%) یا سرمایهگذاریهای بزرگ در زمان، تلاش و پول نیاز داشته باشه. توی این موارد شاید بهتر باشه روی چیزی که از قبل داریم کار کنیم تا به دنبال چیزی جدید بگردیم.