نوشته‌ها

انتخاب ویژگی‌ها

ممکن است داده‌های زیادی داشته باشیم. اما آیا همه آن‌ها مفید و مرتبط هستند؟ کدام ستون‌ها و ویژگی‌ها به احتمال زیاد در نتایج ما تأثیر می‌گذارند؟

اغلب، برخی از داده‌های ما برای تحلیل ما بی‌ربط هستند. به عنوان مثال، آیا نام استارتاپ بر موفقیت تأمین مالی آن تأثیر می‌گذارد؟ آیا رابطه‌ای بین رنگ مورد علاقه یک فرد و هوش او وجود دارد؟

انتخاب مهم‌ترین ویژگی‌ها یکی از وظایف حیاتی در پردازش داده‌ها است. چرا باید زمان و منابع محاسباتی ارزشمند خود را برای گنجاندن ویژگی‌های غیرمرتبط در تحلیل خود هدر دهیم؟ بدتر از آن، آیا ویژگی‌های غیرمرتبط می‌توانند تحلیل ما را منحرف کنند؟

اهمیت انتخاب ویژگی‌ها

جواب مثبت است. همانطور که در پست قبل گفته شد، زباله وارد کنید، زباله خارج می‌شود. اگر ویژگی‌های غیرمرتبط را در تحلیل خود بگنجانیم، ممکن است نتایج نادرست و بی‌ربطی بدست آوریم. کامپیوتر و الگوریتم ما از “نمونه‌های بد” یاد می‌گیرند که منجر به نتایج نادرست می‌شود.

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

مثال انتخاب ویژگی‌ها

فرض کنید ما بیش از 20 ویژگی داریم که مشتریان را توصیف می‌کنند. این ویژگی‌ها شامل سن، محدوده درآمد، مکان، جنسیت، داشتن فرزند یا نداشتن، سطح خرج کردن، خریدهای اخیر، بالاترین سطح تحصیلات، مالکیت خانه یا نه، و بیش از دوجین ویژگی دیگر است. با این حال، همه این‌ها ممکن است با تحلیل یا مدل پیش‌بینی ما مرتبط نباشند. اگرچه ممکن است همه این ویژگی‌ها تا حدودی تأثیر داشته باشند، تحلیل ممکن است بسیار پیچیده باشد تا مفید باشد.

چگونگی انتخاب ویژگی‌های مرتبط

انتخاب ویژگی‌ها راهی برای ساده کردن تحلیل با تمرکز بر روی ارتباط است. اما چگونه می‌دانیم که یک ویژگی خاص مرتبط است؟ اینجاست که دانش و تخصص حوزه وارد می‌شود. به عنوان مثال، تحلیل‌گر داده یا تیم باید دانش مربوط به خرده‌فروشی (در مثال ما) را داشته باشد. به این ترتیب، تیم می‌تواند ویژگی‌هایی را که بیشترین تأثیر را بر مدل پیش‌بینی یا تحلیل دارند، به درستی انتخاب کند.

دانش حوزه و انتخاب ویژگی‌ها

زمینه‌های مختلف اغلب ویژگی‌های مرتبط متفاوتی دارند. به عنوان مثال، تحلیل داده‌های خرده‌فروشی ممکن است کاملاً متفاوت از مطالعه کیفیت شکلات باشد. در خرده‌فروشی ما بر ویژگی‌هایی که بر خرید مردم تأثیر می‌گذارند (و در چه مقدار) تمرکز می‌کنیم. از طرف دیگر، تحلیل داده‌های کیفیت شکلات ممکن است نیاز به مطالعه ترکیبات شیمیایی شکلات و تأثیرات آن‌ها بر ترجیحات مردم داشته باشد.

وابستگی ویژگی‌ها

علاوه بر این، نیاز به دانش حوزه دارد تا بدانیم کدام ویژگی‌ها به یکدیگر وابسته هستند. در مثال ما درباره کیفیت شکلات ، مواد موجود در شکلات ممکن است با یکدیگر واکنش نشان دهند و در نتیجه بر مقدار این مواد تأثیر بگذارند. وقتی مقدار یک ماده را افزایش می‌دهید، ممکن است مقدار دیگری را افزایش یا کاهش دهد.

انتخاب ویژگی‌های مناسب

انتخاب مناسب‌ترین ویژگی‌ها ممکن است زمان بیشتری بگیرد، به خصوص وقتی با یک مجموعه داده بزرگ (با صدها یا حتی هزاران ستون) سروکار داریم. حرفه‌ای‌ها اغلب ترکیبات مختلفی را امتحان می‌کنند و می‌بینند کدام یک بهترین نتایج را می‌دهند (یا به دنبال چیزی هستند که بیشتر منطقی باشد).

اهمیت تخصص حوزه

در کل، تخصص حوزه می‌تواند از مهارت تحلیل داده‌ها مهم‌تر باشد. در نهایت، باید با پرسیدن سؤالات صحیح شروع کنیم تا تمرکز بر اعمال پیچیده‌ترین الگوریتم‌ها بر داده‌ها. برای فهمیدن سؤالات صحیح (و مهم‌ترین آن‌ها)، شما یا کسی از تیمتان باید در آن زمینه تخصص داشته باشید.

منابع داده آنلاین

در مورد پردازش داده‌ها و انتخاب ویژگی‌های مرتبط بحث کردیم. اما در وهله اول از کجا داده‌ها را دریافت کنیم؟ چگونه از اعتبار آن‌ها اطمینان حاصل کنیم؟ و برای مبتدیان، کجا داده بگیرند تا بتوانند تحلیل داده را تمرین کنند؟

می‌توانید با مخزن یادگیری ماشین UCI شروع کنید (https://archive.ics.uci.edu/ml/datasets.html) که می‌توانید به مجموعه داده‌هایی درباره تجارت، مهندسی، علوم زندگی، علوم اجتماعی و علوم فیزیکی دسترسی پیدا کنید. می‌توانید داده‌هایی درباره ال نینو، رسانه‌های اجتماعی، شخصیت‌های دست‌نوشته، تشخیص درایو بدون حسگر، بازاریابی بانکی و موارد دیگر پیدا کنید. این کافی است تا زمان شما را برای ماه‌ها و سال‌ها پر کند اگر به تحلیل داده‌های بزرگ مقیاس جدی بپردازید.

منابع داده دیگر

همچنین می‌توانید مجموعه داده‌های جالب‌تری را در Kaggle (https://www.kaggle.com/datasets) پیدا کنید مانند داده‌هایی درباره بقای تایتانیک، خرید مواد غذایی، تشخیص‌های پزشکی، کیفیت هوا در تاریخ، بررسی‌های آمازون، آمار جرم و جنایت و قیمت مسکن.

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

منابع داده داخلی

اگر قصد دارید در یک شرکت، دانشگاه یا موسسه تحقیقاتی کار کنید، احتمالاً با داده‌های داخلی کار خواهید کرد. برای مثال، اگر در یک شرکت بزرگ تجارت الکترونیک کار می‌کنید، انتظار داشته باشید که بر روی داده‌هایی که شرکت شما جمع‌آوری می‌کند و تولید می‌کند کار کنید.

شرکت‌های بزرگ اغلب هر ثانیه مگابایت‌های داده تولید می‌کنند. این‌ها در حال ذخیره‌سازی و/یا پردازش در یک پایگاه داده هستند. وظیفه شما سپس این است که این جریان‌های بی‌پایان داده را تحلیل کنید و از بینش‌های به دست آمده برای بهبود کارایی یا سودآوری استفاده کنید.

ذخیره‌سازی و پردازش داده‌های داخلی

اول، داده‌هایی که جمع‌آوری می‌شوند باید مرتبط با عملیات کسب و کار باشند. شاید زمان خرید، دسته‌بندی که محصول در آن قرار می‌گیرد و اینکه آیا با تخفیف عرضه شده است، همه مرتبط باشند. این اطلاعات باید سپس در پایگاه داده ذخیره شوند (با پشتیبان‌گیری) تا تیم شما بتواند بعداً آن را تحلیل کند.

انواع فایل‌های داده

داده‌ها می‌توانند در فرمت‌ها و انواع فایل‌های مختلفی مانند CSV، SQLite، JSON و BigQuery ذخیره شوند. نوع فایلی که شرکت شما انتخاب کرده ممکن است بستگی به راحتی و زیرساخت‌های موجود داشته باشد. مهم است که بدانید چگونه با این نوع فایل‌ها کار کنید (اغلب در توضیحات شغلی ذکر می‌شوند) تا بتوانید تحلیل معناداری انجام دهید.

دریافت و پردازش داده‌ها

زباله وارد کنید، زباله خارج می کنید

این جمله توی تحلیل داده‌ها خیلی درسته. چون دقت تحلیل ما کاملاً به کیفیت داده‌هایی که استفاده می‌کنیم بستگی داره. اگه داده‌های بی‌کیفیت وارد کنیم، انتظار نداشته باشید که نتایج باکیفیتی بگیریم.

برای همین، تحلیل‌گران داده و مهندس‌های یادگیری ماشین زمان زیادی رو صرف دریافت و پردازش داده‌های باکیفیت می‌کنن. برای این کار، داده‌ها باید به فرمتی باشن که قابل استفاده برای تحلیل و مقاصد دیگه باشن. بعدش هم باید داده‌ها به درستی پردازش بشن تا بتونیم الگوریتم‌ها رو روی اون‌ها اعمال کنیم و مطمئن بشیم که تحلیل‌هامون درسته.

فایل‌های 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%) یا سرمایه‌گذاری‌های بزرگ در زمان، تلاش و پول نیاز داشته باشه. توی این موارد شاید بهتر باشه روی چیزی که از قبل داریم کار کنیم تا به دنبال چیزی جدید بگردیم.

یک مثال سریع: مجموعه داده‌ی Iris

بیایید سریع ببینیم تحلیل داده‌ها و یادگیری ماشین چطور روی مجموعه داده‌های واقعی کار می‌کنن. هدف اینجا اینه که پتانسیل پایتون و یادگیری ماشین رو روی برخی مسائل جالب نشون بدیم.

در این مثال خاص، هدف اینه که گونه‌ی گل Iris رو بر اساس طول و عرض کاسبرگ‌ها و گلبرگ‌ها پیش‌بینی کنیم. اول، باید یه مدل بسازیم بر اساس مجموعه داده‌ای که اندازه‌گیری‌های گل‌ها و گونه‌های مربوط به اون‌ها رو داره. بر اساس کدمون، کامپیوتر “از داده‌ها یاد می‌گیره” و الگوهایی از اون استخراج می‌کنه. بعد از این، چیزی که یاد گرفته رو روی یه مجموعه داده‌ی جدید اعمال می‌کنه. بیایید به کد نگاه کنیم:

مرحله 1: نصب و وارد کردن کتابخانه‌ها

اولین کاری که باید انجام بدیم نصب و وارد کردن کتابخانه‌های لازم هست:

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

مرحله 2: بارگیری داده‌ها

حالا مجموعه داده‌ی Iris رو بارگیری می‌کنیم:

# بارگیری مجموعه داده‌ی Iris
iris = load_iris()
data = pd.DataFrame(data=iris.data, columns=iris.feature_names)
data['species'] = iris.target

مرحله 3: تقسیم داده‌ها به مجموعه‌ی آموزشی و آزمایشی

برای ارزیابی عملکرد مدل، داده‌ها رو به دو بخش آموزشی و آزمایشی تقسیم می‌کنیم:

# تقسیم داده‌ها به مجموعه‌های آموزشی و آزمایشی
X = data[iris.feature_names]
y = data['species']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

مرحله 4: ساخت و آموزش مدل

حالا یک مدل جنگل تصادفی (Random Forest) می‌سازیم و اون رو آموزش می‌دیم:

# ساخت و آموزش مدل جنگل تصادفی
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

مرحله 5: پیش‌بینی و ارزیابی مدل

بعد از آموزش مدل، پیش‌بینی‌ها رو روی مجموعه‌ی آزمایشی انجام می‌دیم و دقت مدل رو ارزیابی می‌کنیم:

# پیش‌بینی روی مجموعه‌ی آزمایشی
y_pred = model.predict(X_test)

# ارزیابی دقت مدل
accuracy = accuracy_score(y_test, y_pred)
print(f'DAccuracy: {accuracy * 100:.2f}%')

نتیجه

اگر همه چیز به درستی پیش بره، باید دقت مدل رو ببینیم که به احتمال زیاد بالاست، چون مجموعه داده‌ی Iris نسبتاً ساده و تمیزه.

توضیح مختصر کد

  • بارگیری داده‌ها: ابتدا مجموعه داده‌ی Iris رو از کتابخانه‌ی sklearn بارگیری می‌کنیم و اون رو به یک DataFrame تبدیل می‌کنیم.
  • تقسیم داده‌ها: داده‌ها رو به دو بخش آموزشی (برای آموزش مدل) و آزمایشی (برای ارزیابی مدل) تقسیم می‌کنیم.
  • ساخت و آموزش مدل: یک مدل جنگل تصادفی می‌سازیم و اون رو با استفاده از داده‌های آموزشی آموزش می‌دیم.
  • پیش‌بینی و ارزیابی: پیش‌بینی‌ها رو روی مجموعه‌ی آزمایشی انجام می‌دیم و دقت مدل رو محاسبه می‌کنیم.

این یک مثال ساده اما کاربردی از اینه که چطور می‌تونیم با استفاده از پایتون و یادگیری ماشین، مسائل جالب و واقعی رو حل کنیم و بینش‌های ارزشمندی از داده‌ها استخراج کنیم.

محدودیت‌های تحلیل داده‌ها و یادگیری ماشین

شاید از اخبار و مقالات آنلاین شنیده باشید که یادگیری ماشین و تحلیل پیشرفته داده‌ها می‌تونن ساختار جامعه رو تغییر بدن (اتوماسیون، از دست رفتن شغل‌ها، درآمد پایه همگانی، تسلط هوش مصنوعی).

در واقع، جامعه در حال حاضر داره تغییر می‌کنه. پشت صحنه، یادگیری ماشین و تحلیل مداوم داده‌ها در حال انجامه، به خصوص در موتورهای جستجو، شبکه‌های اجتماعی و تجارت الکترونیک. یادگیری ماشین حالا کارهایی مثل این‌ها رو راحت‌تر و سریع‌تر انجام می‌ده:

  • آیا در تصویر چهره انسانی وجود داره؟
  • آیا کاربر روی تبلیغ کلیک می‌کنه؟ (آیا تبلیغ شخصی‌سازی شده و برای او جذابه؟)
  • چطور کپشن‌های دقیق‌تری روی ویدیوهای یوتیوب ایجاد کنیم؟ (تشخیص گفتار و تبدیل به متن)
  • آیا موتور یا قطعه‌ای خراب می‌شه؟ (نگهداری پیشگیرانه در تولید)
  • آیا تراکنش جعلیه؟
  • آیا ایمیل اسپم هست یا نه؟

این‌ها به لطف دسترسی به مجموعه داده‌های عظیم و قدرت پردازش بالا ممکن شده. با این حال، تحلیل پیشرفته داده‌ها با استفاده از پایتون (و یادگیری ماشین) جادو نیست. این‌ها راه‌حل همه مشکلات نیستن. چرا که دقت و عملکرد ابزارها و مدل‌های ما به شدت وابسته به یکپارچگی داده‌ها و مهارت و قضاوت خودمونه.

دقت و عملکرد

رایج‌ترین استفاده از تحلیل داده‌ها در پیش‌بینی‌های موفق (پیش‌بینی) و بهینه‌سازیه. آیا تقاضا برای محصول ما در پنج سال آینده افزایش پیدا می‌کنه؟ بهترین مسیرها برای تحویل‌کالا که کمترین هزینه عملیاتی رو دارن چیه؟

به همین دلیله که بهبود دقت حتی به اندازه 1% می‌تونه به میلیون‌ها دلار درآمد اضافی تبدیل بشه. مثلاً، فروشگاه‌های بزرگ می‌تونن برخی محصولات رو از قبل انبار کنن اگه نتایج تحلیل نشون بده تقاضا در حال افزایشه. حمل و نقل و لجستیک هم می‌تونن مسیرها و برنامه‌های بهتری برای استفاده کمتر از سوخت و تحویل‌های سریع‌تر برنامه‌ریزی کنن.

علاوه بر بهبود دقت، اولویت دیگه‌ای هم روی اطمینان از عملکرد قابل اعتماده. تحلیل ما چطور روی مجموعه داده‌های جدید عمل می‌کنه؟ آیا باید عوامل دیگه‌ای رو در تحلیل داده‌ها و انجام پیش‌بینی‌ها در نظر بگیریم؟ کار ما باید همیشه نتایج دقیق و قابل اعتماد تولید کنه. در غیر این صورت، اصلاً علمی نیست چون نتایج قابل بازتولید نیستن.

کشف فرصت‌ها

علاوه بر پیش‌بینی و بهینه‌سازی موفق، تحلیل داده مناسب می‌تونه به ما کمک کنه تا فرصت‌ها رو کشف کنیم. بعداً ممکنه متوجه بشیم که کاری که انجام دادیم در پروژه‌ها و زمینه‌های دیگه هم کاربرد داره. می‌تونیم اگه عمیق‌تر بررسی کنیم، نقاط ناهنجار و الگوهای جالب رو هم شناسایی کنیم. مثلاً شاید مشتری‌ها در خوشه‌هایی قرار بگیرن که برای ما بزرگ باشه تا اون‌ها رو بررسی و بهره‌برداری کنیم. شاید تراکم‌های بالای غیرمعمولی از مشتری‌ها وجود داشته باشه که در یه محدوده درآمدی یا سطح هزینه‌ای خاص قرار بگیرن.

این‌ها فقط نمونه‌های معمول از کاربردهای تحلیل داده مناسب هستن. در فصل بعد، یکی از نمونه‌های پرکاربرد در نمایش پتانسیل امیدوارکننده تحلیل داده و یادگیری ماشین رو بحث می‌کنیم. همچنین، به بررسی پیامدها و فرصت‌های موجود می‌پردازیم.

تحلیل داده‌ها در مقابل علم داده و یادگیری ماشین

تحلیل داده‌ها و علم داده

تحلیل داده‌ها و علم داده تقریباً مشابه هستن چون هدف هر دو استخراج اطلاعات ارزشمند از داده‌ها و استفاده از اون‌ها برای تصمیم‌گیری بهتره.

  • تحلیل داده‌ها: معمولاً به استفاده از ابزارهایی مثل Microsoft Excel و دیگر نرم‌افزارها برای خلاصه‌سازی داده‌ها و پیدا کردن الگوها مربوط می‌شه.
  • علم داده: معمولاً با استفاده از برنامه‌نویسی برای کار با مجموعه‌های بزرگ داده مرتبطه. علم داده به خاطر تولید گیگابایت‌های داده از منابع آنلاین و فعالیت‌ها (موتورهای جستجو، شبکه‌های اجتماعی) محبوب شده.

تفاوت‌ها

اگرچه عنوان شغلی “دانشمند داده” خیلی جذاب‌تر از “تحلیلگر داده” به نظر میاد، اما وظایف شغلی این دو ممکنه مشابه و هم‌پوشانی داشته باشه. هر دو با کشف الگوها و تولید بینش از داده‌ها سر و کار دارن. همچنین کار اونها، شامل پرسیدن سوالات هوشمندانه درباره ماهیت داده‌ها می‌شه (مثلاً: آیا نقاط داده‌ای به صورت طبیعی به خوشه‌ها تقسیم می‌شن؟ آیا واقعاً بین سن و سرطان ارتباطی وجود داره؟).

یادگیری ماشین چیست؟

یادگیری ماشین اغلب به صورت متناوب با علم داده استفاده می‌شه. این به این دلیله که یادگیری ماشین درباره “یادگیری از داده‌ها” است. وقتی الگوریتم‌های یادگیری ماشین رو اعمال می‌کنیم، کامپیوتر الگوها رو تشخیص می‌ده و از “چیزی که یاد گرفته” روی داده‌های جدید استفاده می‌کنه.

مثال:

فرض کنید می‌خواهیم بدونیم آیا یه نفر بدهی‌ش رو پرداخت می‌کنه یا نه. خوشبختانه، ما یه مجموعه داده بزرگ درباره افراد مختلف داریم که یا بدهی‌شون رو پرداخت کردن یا نکردن. همچنین داده‌های دیگه‌ای هم جمع‌آوری کردیم (ایجاد پروفایل مشتری) مثل سن، محدوده درآمد، محل سکونت و شغل. وقتی الگوریتم یادگیری ماشین مناسب رو اعمال می‌کنیم، کامپیوتر از داده‌ها یاد می‌گیره. بعداً می‌تونیم داده‌های جدید (اطلاعات یه متقاضی جدید) رو وارد کنیم و چیزی که کامپیوتر یاد گرفته روی داده‌های جدید اعمال می‌شه.

ممکنه بعداً یه برنامه ساده بسازیم که بلافاصله ارزیابی کنه آیا یه نفر بدهی‌ش رو پرداخت می‌کنه یا نه بر اساس اطلاعاتش (سن، محدوده درآمد، محل سکونت و شغل). این یه مثال از استفاده از داده‌ها برای پیش‌بینی رفتار احتمالی فرد هستش.

امکانات

یادگیری از داده‌ها امکانات زیادی رو باز می‌کنه به ویژه در زمینه پیش‌بینی‌ها و بهینه‌سازی‌ها. این موضوع به لطف دسترسی به مجموعه داده‌های بزرگ و قدرت پردازش بالای کامپیوترها به واقعیت تبدیل شده. الان می‌تونیم داده‌ها رو در حد گیگابایت در عرض یک روز با استفاده از کامپیوترها یا قابلیت‌های ابری پردازش کنیم.

اگرچه الگوریتم‌های علم داده و یادگیری ماشین هنوز کامل نیستن، اما در خیلی از کاربردها مفید هستن مثل تشخیص تصویر، توصیه محصولات، رتبه‌بندی موتورهای جستجو و تشخیص پزشکی. و تا این لحظه، دانشمندان و مهندسین در سراسر جهان به بهبود دقت و عملکرد ابزارها، مدل‌ها و تحلیل‌هاشون ادامه می‌دن.

آیا تخصص ریاضی برای تحلیل داده با پایتون ضروری است؟

تحلیل داده‌ها اغلب به معنای کار با اعداد و استخراج اطلاعات ارزشمند از اونهاست. اما آیا واقعاً باید توی اعداد و ریاضیات متخصص باشیم؟

موفقیت در تحلیل داده‌ها با استفاده از پایتون معمولاً نیاز به داشتن مهارت‌ها و دانش مناسبی در ریاضی، برنامه‌نویسی و حوزه کاری شما داره. این یعنی لازم نیست تو هیچ‌کدوم از این‌ها متخصص باشید (مگر اینکه قصد دارید مقاله‌ای در کنفرانس‌های علمی بین‌المللی ارائه بدید).

نذارید خیلی از “متخصص‌ها” شما رو گول بزنن چون خیلی از اون‌ها یا فیک هستن یا اصلاً تجربه‌ای ندارن. چیزی که باید بدونید اینه که قدم بعدی چیه تا بتونید پروژه‌هاتون رو با موفقیت به پایان برسونید. شما بعد از خوندن همه فصل‌های اینجا متخصص هیچ چیزی نخواهید شد. اما این مطالب برای این کافی هست که شما یه درک بهتر از پایتون و تحلیل داده‌ها پیدا کنید.

حالا برگردیم به تخصص ریاضی. احتمالاً شما از قبل با مفاهیمی مثل میانگین، انحراف معیار و دیگه اصطلاحات رایج در آمار آشنا هستید. در حین عمیق‌تر شدن در تحلیل داده‌ها ممکنه با مفاهیمی مثل حساب دیفرانسیل و انتگرال و جبر خطی برخورد کنید. اگه وقت و علاقه دارید، می‌تونید هر زمان که خواستید اون‌ها رو مطالعه کنید. این ممکنه به شما یه مزیت در پروژه تحلیل داده‌ای که روش کار می‌کنید بده یا نه.

باز هم میگم، مسئله حل مشکلاته. تمرکز باید روی این باشه که چطور یه چالش رو بگیرید و با موفقیت از پسش بربیاید. این در همه زمینه‌ها به‌خصوص در تجارت و علم صدق می‌کنه. نذارید هیاهو یا افسانه‌ها شما رو منحرف کنن. روی مفاهیم اصلی تمرکز کنید و موفق خواهید شد.

آموزش سینتکس پایتون به زبان ساده

پایتون به خاطر سادگی و خوانایی سینتکسش معروفه. در این مطلب، می‌خوایم به زبان ساده چند تا از مفاهیم اصلی سینتکس پایتون رو توضیح بدیم.

۱. متغیرها و انواع داده‌ها

در پایتون، شما نیازی به تعریف نوع متغیر ندارید. کافی است مقدار رو به متغیر اختصاص بدید:

x = 5       # عدد صحیح (integer)
y = 3.14    # عدد اعشاری (float)
name = "Ali" # رشته (string)
is_student = True # مقدار بولی (boolean)

۲. چاپ کردن (Print)

برای چاپ کردن مقادیر در پایتون از تابع print() استفاده می‌کنیم:

print(x)          # چاپ عدد صحیح
print(name)       # چاپ رشته
print("Hello, world!") # چاپ متن ثابت

۳. لیست‌ها (Lists)

لیست‌ها در پایتون برای ذخیره‌ی مجموعه‌ای از مقادیر استفاده می‌شن. شما می‌تونید به راحتی لیست‌ها رو ایجاد و ویرایش کنید:

numbers = [1, 2, 3, 4, 5]
print(numbers[0]) # دسترسی به اولین عنصر لیست
numbers.append(6) # افزودن یک عنصر به انتهای لیست
print(numbers)

۴. حلقه‌ها (Loops)

در پایتون، دو نوع حلقه اصلی وجود داره: for و while.

حلقه for برای تکرار بر روی مجموعه‌ای از آیتم‌ها استفاده می‌شه:

for number in numbers:
    print(number)

حلقه while تا زمانی که شرط برقرار باشه، اجرا می‌شه:

count = 0
while count < 5:
    print(count)
    count += 1

۵. شرط‌ها (Conditionals)

برای بررسی شرط‌ها در پایتون از if, elif و else استفاده می‌کنیم:

age = 18

if age < 18:
    print("You are a minor.")
elif age == 18:
    print("You are exactly 18 years old.")
else:
    print("You are an adult.")

۶. توابع (Functions)

برای تعریف توابع در پایتون از کلمه کلیدی def استفاده می‌کنیم:

def greet(name):
    print("Hello, " + name + "!")

greet("Ali")

۷. کتابخانه‌ها (Libraries)

پایتون دارای کتابخانه‌های زیادیه که می‌تونید از اون‌ها برای انجام کارهای مختلف استفاده کنید. مثلاً برای کار با اعداد و محاسبات علمی از numpy استفاده می‌کنیم:

این‌ها فقط چند مثال ساده بودن که بهتون کمک کنه با سینتکس پایتون آشنا بشید. با تمرین و استفاده بیشتر از پایتون، بهتر می‌تونید از امکانات و قدرت این زبان استفاده کنید.

چرا پایتون را برای علوم داده و یادگیری ماشین انتخاب کنیم؟

میگن پایتون یه زبان برنامه‌نویسی ساده و قابل فهمه. به همین خاطر خیلی از مهندس‌ها و دانشمندها پایتون رو برای کارهای علمی و عددی انتخاب می‌کنن. شاید ترجیح میدن زودتر برن سراغ کار اصلی (مثلاً پیدا کردن اثر یا همبستگی یه متغیر با خروجی) به جای اینکه صدها ساعت صرف یاد گرفتن یه زبان برنامه‌نویسی پیچیده بکنن.

این باعث میشه که دانشمندها، مهندس‌ها، پژوهشگرها و تحلیلگرها زودتر پروژه رو شروع کنن و تو کمترین زمان و با کمترین منابع به نتایج با ارزش برسن. البته این به این معنی نیست که پایتون کامل و ایده‌آله برای تحلیل داده و یادگیری ماشین. زبان‌های دیگه مثل R ممکنه ویژگی‌هایی داشته باشن که پایتون نداره. ولی با این حال، پایتون یه نقطه شروع خوبه و میتونه به شما کمک کنه تا تحلیل داده‌ها رو بهتر بفهمید و تو پروژه‌های آینده‌تون ازش استفاده کنید.

پایتون در مقابل R

شاید قبلاً تو سایت‌هایی مثل Stack Overflow، Reddit، Quora و بقیه انجمن‌ها در مورد این موضوع شنیده باشید. شاید هم به دنبال زبان‌های برنامه‌نویسی دیگه‌ای گشته باشید چون در نهایت، یاد گرفتن پایتون یا R (یا هر زبان دیگه‌ای) چندین هفته و ماه طول می‌کشه. این یه سرمایه‌گذاری بزرگ زمانیه و نمی‌خواید اشتباه کنید.

برای شروع، با پایتون شروع کنید چون مهارت‌ها و مفاهیم کلی به راحتی به زبان‌های دیگه منتقل میشن. خب، تو بعضی موارد ممکنه نیاز باشه یه روش فکری کاملاً جدید رو قبول کنید. ولی به طور کلی، دونستن چطور استفاده کردن از پایتون تو تحلیل داده‌ها میتونه به شما کمک کنه تا خیلی از مشکلات جالب رو حل کنید.

خیلیا میگن که R مخصوص آمارشناسان طراحی شده (خصوصاً تو زمینه قابلیت‌های بصری‌سازی داده‌های قوی و آسون). یاد گرفتنش هم نسبتاً آسونه، مخصوصاً اگه بخواید ازش عمدتاً برای تحلیل داده استفاده کنید. از طرف دیگه، پایتون یه جورایی انعطاف‌پذیره چون فراتر از تحلیل داده میره. خیلی از دانشمندهای داده و فعالان یادگیری ماشین ممکنه پایتون رو انتخاب کرده باشن چون کدی که نوشتن میتونه به یه برنامه وب زنده و پویا وصل بشه.

با اینکه همه اینا قابل بحثه، پایتون هنوز یه انتخاب محبوبه، مخصوصاً بین مبتدی‌ها یا کسایی که میخوان سریع با تحلیل داده‌ها و یادگیری ماشین آشنا بشن. یاد گرفتنش نسبتاً آسونه و می‌تونید بعداً به برنامه‌نویسی تمام وقت مشغول بشید اگه تصمیم گرفتید که این مسیر برای شما مناسب‌تره.

استفاده گسترده از پایتون در تحلیل داده‌ها

امروزه بسته‌ها و ابزارهای زیادی وجود دارن که استفاده از پایتون در تحلیل داده‌ها و یادگیری ماشین رو خیلی راحت‌تر می‌کنن. TensorFlow (از گوگل)، Theano، scikit-learn، numpy و pandas فقط چند نمونه از چیزهایی هستن که علم داده رو سریع‌تر و آسون‌تر می‌کنن.

همچنین، فارغ‌التحصیل‌های دانشگاه می‌تونن به سرعت وارد علم داده بشن چون خیلی از دانشگاه‌ها حالا مبانی علوم کامپیوتر رو با استفاده از پایتون به عنوان زبان برنامه‌نویسی اصلی یاد میدن. تغییر از برنامه‌نویسی کامپیوتر و توسعه نرم‌افزار می‌تونه خیلی سریع اتفاق بیفته چون خیلی‌ها همین الان پایه‌های خوبی برای شروع یادگیری و کاربرد برنامه‌نویسی در چالش‌های داده‌های واقعی دارن.

یکی دیگه از دلایل استفاده گسترده از پایتون اینه که منابع بی‌شماری وجود دارن که بهت میگن چطور تقریباً هر کاری رو انجام بدی. اگه سوالی داری، احتمال زیادی هست که یکی دیگه قبلاً اون رو پرسیده و یکی دیگه هم براش حلش کرده (گوگل و Stack Overflow دوستات هستن). این موضوع پایتون رو حتی محبوب‌تر می‌کنه چون منابع آنلاین زیادی وجود داره.

وضوح

به خاطر سادگی یادگیری و استفاده از پایتون (تا حدی به خاطر وضوح سینتکسش)، حرفه‌ای‌ها می‌تونن روی جنبه‌های مهم‌تر پروژه‌ها و مشکلاتشون تمرکز کنن. مثلاً، می‌تونن به جای ساختن همه چیز از اول، سریعاً از numpy، scikit-learn و TensorFlow استفاده کنن تا به بینش‌های لازم برسن.

این یه سطح دیگه از وضوح رو فراهم می‌کنه چون حرفه‌ای‌ها می‌تونن بیشتر روی ماهیت مشکل و پیامدهاش تمرکز کنن. اون‌ها همچنین می‌تونن روش‌های کارآمدتری برای مقابله با مشکل پیدا کنن به جای اینکه توی حجم زیاد اطلاعات یه زبان برنامه‌نویسی غرق بشن.

تمرکز همیشه باید روی مشکل و فرصت‌هایی باشه که ممکنه معرفی کنه. فقط یه کشف می‌تونه تمام طرز فکر ما رو درباره یه چالش خاص تغییر بده و پایتون ممکنه بتونه کمک کنه به خاطر وضوح و سادگی‌ش.

ایجاد عنوانی از کلمات کلیدی برای تصویر

مدل های یادگیری عمیق امروزه در حل مسائل مختلف بر روی تصاویر و ویدیوها کاربرد فراوانی دارند. یکی از این مسائل، تولید عنوان بر اساس تصاویر ورودی است. در این مقاله، قصد داریم با استفاده از دو مدل یادگیری عمیق پیش آموزش داده شده، یک عنوان برای تصویر ورودی ایجاد کنیم.

مدل اول که از مدل ResNet50 بدون لایه‌ی کلاس بالا برای استخراج ویژگی‌ها استفاده می‌کنیم، برای تشخیص ویژگی‌های بصری از تصویر استفاده می‌شود. این مدل با استفاده از یک شبکه عصبی عمیق، ویژگی‌های بالادستی متصل به کلاس‌های مختلف تصاویر را استخراج می‌کند.

مدل دوم که از یک مدل شبکه عصبی عمیق به نام SSD300 برای تشخیص اشیاء در تصویر استفاده می‌کنیم. این مدل قادر است تا چندین شیء مختلف را در یک تصویر تشخیص دهد. برای اینکه مدل بتواند اشیاء را به درستی تشخیص دهد، از یک نقشه برچسب استفاده می‌کنیم که شاخص کلاس‌ها را به نام‌های اجسام مختلف نگاشت می‌کند.

با ادغام قابلیت‌های این دو مدل، ابتدا با استفاده از مدل ResNet50 ویژگی‌های تصویر را استخراج می‌کنیم. سپس با استفاده از مدل SSD300 اشیاء موجود در تصویر را تشخیص داده و نام آن‌ها را استخراج می‌کنیم. در نهایت، با استفاده از نام‌های اشیاء شناسایی شده، یک عنوان برای تصویر ایجاد می‌کنیم.

در مجموع، این روش ترکیب قابلیت‌های یک مدل برای استخراج ویژگی‌ها و یک مدل دیگر برای تشخیص اشیاء، منجر به ایجاد یک عنوان بر اساس اشیاء شناسایی شده در تصویر می‌شود.


import tensorflow as tf
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np

# Load pre-trained ResNet50 model
model = ResNet50(weights='imagenet')

def generate_title(image_path):
# Load and preprocess the image
img = tf.keras.preprocessing.image.load_img(image_path, target_size=(224, 224))
img_array = tf.keras.preprocessing.image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array = preprocess_input(img_array)

# Make predictions
predictions = model.predict(img_array)
# Decode predictions
decoded_predictions = decode_predictions(predictions, top=10)[0]

# Extract labels from predictions
labels = [label for (_, label, _) in decoded_predictions]

# Generate title based on labels
title = " ".join(labels)

return title

# Example usage
image_path = "example_image.jpg"
title = generate_title(image_path)
print("Generated Title:", title)

 

تصحیح جهت تصویر کارت اسکن شده با پایتون

یکی دیگر از کاربردهای مسئله تضیح داده شده در نوشته “کشف تصویر کوچک درون تصویر بزرگ با استفاده از پایتون و OpenCV” این هست که شما با استفاده از این کد می توانید یک نشانه خاص در کارت شناسایی را پیدا کرده و بر اساس آن تغییرات خاصی را اعمال کنید.

برای نمونه ما در اینجا یک نوع گواهینامه نمونه را که به صورت برعکس اسکن شده است به برنامه داده ایم و پس از پیدا کردن نشانه موجود در گوشه سمت راست و بالای کارت آن را به تعداد لازم rotate می کنیم تا تصویر گواهینامه با جهت درست نشان داده شود.

نمونه کد:

import cv2

def find_image_in_larger_image(small_image, large_image):

# Read images

# Check if images are loaded successfully

if small_image is None or large_image is None:

print("Error: Unable to load images.")

return None

# Get dimensions of both images

small_height, small_width = small_image.shape

large_height, large_width = large_image.shape

# Find the template (small image) within the larger image

result = cv2.matchTemplate(large_image, small_image, cv2.TM_CCOEFF_NORMED)

# Define a threshold to consider a match

threshold = 0.6

# Find locations where the correlation coefficient is greater than the threshold

locations = cv2.findNonZero((result >= threshold).astype(int))

# If no match is found

if locations is None:

return None

# Determine position of the matched areas

matched_positions = []

for loc in locations:

x, y = loc[0]

if x < large_width / 2:

position_x = "left"

else:

position_x = "right"

if y < large_height / 2:

position_y = "top"

else:

position_y = "bottom"

matched_positions.append((position_x, position_y))

return matched_positions

# Example usage

small_image_path = "mark.jpg"

large_image_path = "card.jpg"

small_image = cv2.imread(small_image_path, cv2.IMREAD_GRAYSCALE)

large_image = cv2.imread(large_image_path, cv2.IMREAD_GRAYSCALE)

rotated_large_image=large_image

positions = find_image_in_larger_image(small_image, large_image)

max_rotation = 10 # Set the maximum rotation limit

if positions:

position_x, position_y = positions[0]

print("Position: {}, {}".format(position_x, position_y))

while max_rotation>0:

max_rotation-=1

rotated_large_image = cv2.rotate(rotated_large_image, cv2.ROTATE_90_CLOCKWISE)

positions = find_image_in_larger_image(small_image, rotated_large_image)

if positions:

position_x, position_y = positions[0]

print("Position: {}, {}".format(position_x, position_y))

if(position_x=='right' and position_y=='top'):

cv2.imshow("Mark", small_image)

cv2.imshow("Original", large_image)

cv2.imshow("Result", rotated_large_image)

cv2.waitKey(0)

cv2.destroyAllWindows()

max_rotation=0

else:

print("No match found after {} rotations.".format(10-max_rotation))

else:

print("No match found after {} rotations.".format(10-max_rotation))

 

برای مشاهده در گیت هاب اینجا کلیک کنید.