دیتاساینس به زبان ساده: اصول و فرایند

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

سال ۲۰۱۶ بود که کیف هامبلی، ریاضیدان معروف بریتانیایی جملات بالا رو گفت.

انقلاب و رشد تلفن‌های هوشمند و پیشرفت در تکنولوژی‌های داده‌های بزرگ، باعث به وجود اومدن انقلابی شده. در سال ۲۰۱۲، HBR مقاله ای منتشر کرد که در اون از شغل جدیدی گفت؛ شغلی مرکب از هکرهای دیتا، آنالیزورها، برنامه‌نویس‌ها و مشاورهای قابل اعتماد.

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

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

دیتاساینس یک علمیه که محل تقاطع چند علم دیگه محسوب میشه:

  • بیزنس
  • یادگیری آماری و همون یادگیری ماشین
  • برنامه‌نویسی کامپیوتر

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

ادامه این نوشته

نظر بدید

فیسبوک پیاده‌سازی آزاد DrQA رو منتشر کرد

فیسبوک که یکی از جدی‌ترین شرکتهای فعال تو هوش مصنوعی محسوب میشه، امسال مقاله‌ای داد که در اون DrQA و نحوه عملکردنش رو معرفی کرد. DrQA یک سیستم open-domain question ( ترجمه‌اش چی میشه؟ پاسخگویی به سوالات با دامنه باز؟ سوالات از هرجا؟ نمیدونم!) مبتی بر شبکه‌های عصبی بازگشتیه (Recurrent Neural Network) که با استفاده از تمام مقالات ویکی‌پدیا (که بیشتر از ۵ میلیونه) میسازه و سپس جواب سوالاتی که ازش پرسیده بشه رو با این استفاده از این مقالات میده.

ادامه این نوشته

نظر بدید

نظر کوفاندرهای اینستاگرام در مورد شانس!

امروز بعد از الکامپ یکی از پادکستهای قدیمیتر How I built this رو گوش میدادم که در اون مجری (David Greene ) با دو موسس اینستاگرام یعنی Kevin Systorm و Mike Krieger در مورد اینستاگرام و موفقیتشون صحبت میکنه. اگر نمیدونید لازمه بگم که اینستاگرام استارت‌آپی بود که دو سال بعد از راه‌اندازیش، ۱ میلیارد دلار خریداری شد!

مجری (David): چقدر از اتفاقهایی که برای شما پیش اومد (موفقیت‌هاتون) شانس بود؟

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

نظر بدید

بهترین معماری برای برنامه‌های اندروید

شما برنامه‌نویس اندروید هستید؟ از چه معماری‌ای برای نوشتن نرم‌افزارهاتون استفاده میکنید؟ MVC؟ MVP؟ یا شاید هم معماری خاصی ندارید و هر جوری که دوست دارید کدها رو مینویسید؟

تست هم مینویسید؟ اگر آره چه اصولی رو تو معماری کدهاتون رعایت میکنید تا تست نوشتن آسون و یا اساسا ممکن بشه؟ و اگر تست نمینویسید چجوری میتونید مطمئن باشید که کد درستی نوشتید؟

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

نتایج جست‌و‌جوی من بین بقیه برنامه‌نویسها خیلی امیدوار کننده نبود! آدمها معمولا برای برنامه‌هاشون تست نمینویسن، شرکتها هم عموما به تست نوشتن اهمیت نمیدن و فرق بین کسی که برنامه‌اش رو برپایه یک معماری اصولی بنا میکنه و کسی که کدش صرفا کار میکنه رو متوجه نمیشن. همین باعث میشه که برنامه‌نویسها هم دلیلی برای نوشتن تست نداشته باشند!

جست‌و‌جوی من ادامه داشت تا به این آدم برخوردم. نوشته‌های این دختر خانم برای من شبیه نوری در تاریکی بود که بالاخره من رو به حقیقت رسوند! ایشون که یک برنامه‌نویس اندروید آلمانیه سه مطلب خیلی عالی در مدیوم نوشته و در این سه مطلب سه معماری MVC و MVP و MVVM رو بررسی کرده. اگر فرصت داشتید نوشته‌های مدیومش رو بخونید که عالیه. اما اگر نداشتید هم دیدن این پرزنتیشن تا حد زیادی بهتون ایده میده:

من این روزها تو اوقات آزادم دارم سعی میکنم روی MVVM کمی وقت بذارم به باهاش راحت شم! این کار لازم داره که با کتابخونه‌های جالبی مثل RxJava و Dagger2 کار کنم که در ابتدا باعث کندی روند پیشرفت میشن. اما سعی میکنم به زودی روی این معماری مسلط شم و اگر فرصت شد، همزمان با پیشرفت خودم، از روند کاری که میکنم مطلب بذارم تا اگر بتونم به کسایی که علاقمندند کمکی کرده باشم.

۲ نظر

هوش مصنوعی، یادگیری ماشین و از اینجور داستانا! (قسمت دوم)

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

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

یادگیری اگر مطابق با تعریف اول (همراه با راهنما) باشه، یادگیری با نظارت یا superviesed learning نام داره و اگه مطابق با تعریف دوم (بدون راهنما) باشه، یادگیری بدون نظارت یا unsupervied learning نام داره.

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

ادامه این نوشته

۳ نظر

هوش مصنوعی، یادگیری ماشین و از اینجور داستانا! (بخش اول)

هوش مصنوعی، یادگیری ماشین، یادگیری عمیق، شبکه‌های عصبی و ….! اینها کلمه‌هاییند که این روزها هی تو اخبار و مقاله‌های مختلف میشنویم و میبینیم. یه روز میشنویم گوگل تونسته با Deep Mind قهرمان بازی Go رو شکست بده. یه روز دیگه واتسون IBM رو میبینیم که داره غوغا میکنه و تشخیص‌های پزشکی میده. هر کدوم این کلمه‌ها ظاهرا معنای واضحی دارند. هوش مصنوعی هوشیه که مصنوعیه! یا یادگیری ماشین مثلا یه نرم‌افزاره که یاد میگیره! این تعریف‌ها اگر چه غلط نیستند، اما خیلی کلی‌اند و عملا ارزش افزوده و دانشی به ما اضافه نمیکنند. برای همین من تصمیم گرفتم این مطلب رو بنویسم و سعی کنم با بیانی راحت و ساده، کمی تو این مفاهیم عمیق‌تر شم.

ia ادامه این نوشته

۲ نظر

بازی ‌X/O یادگیرنده!

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

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

هممون احتمالا با فضای این بازی آشناییم. یه صفحه ۳ در ۳ که بازیکن‌ها به ترتیب علامت مخصوص خودشون رو (X یا O) رو تو یک سلول مینویسند. در انتها بازیکنی برنده‌ست که یک سطر، یک ستون و  یا یک قطر صفحه رو از آن خود کرده باشه! اگر هم هیچ بازیکنی به این هدف نرسه و تمام ۹ سلول صفحه پر شده باشند، بازی مساوی اعلام میشه.

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

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

ادامه این نوشته

۲ نظر

پیاده سازی bottom sheet در اندروید

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

bottom sheet gif

ادامه این نوشته

یک نظر

کافه‌بازار و دسترسی به اس‌ام‌اس ها

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

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

ادامه این نوشته

۶ نظر

سوگندنامه برنامه‌نویسی!

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

به نظرم ما برنامه‌نویس‌ها هم لازمه که سوگندنامه مخصوص خودمون رو داشته باشیم و سوگند بخوریم به برخی چیزها پایبند بمونیم. وبلاگ Clean Coder یه سوگندنامه ۹بندی آماده کرده و اسمش رو گذاشته A Programmer Oath. بد نیست همه ما برنامه‌نویس‌ها فارغ از تشریفات به این نه بند سوگند بخوریم و سعی کنیم رعایتشون کنیم! من این نه بند رو اینجا ترجمه میکنم:

من به توانایی‌های خودم سوگند میخورم که:

۱. کد مخرب تولید نکنم.

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

۳.من با هر بار انتشار خروجی، یک مدرک مطمئن و سریع ارائه خواهم داد که کد من همونطوری که باید،‌ کار میکند. (مثلا براش تست مینویسم)

۴. من خروجی‌های کوچک و مستمر ارائه خواهم داد تا مطمئن شوم که باعث تاخیر در کار بقیه نمیشوم.

۵. در هر فرصت و زمانی، با تلاشی خستگی‌ناپذیر نتیجه کارم رو بهبود می‌بخشم. هرگز آنرا بدتر نخواهم کرد!

۶. من هر کاری بتوانم میکنم تا بهره‌وری خودم و سایرین را افزایش بدهم. من هرگز کاری که منجر به کاهش بهره‌وری شود نخواهم کرد. 

۷. من به طور مداوم به سایرین کمک میکنم و در صورت لزوم از سایرین کمک میگیرم. 

۸. من تخمین‌های زمانی صادقانه خواهم زد. هرگز بدون قطعیت تخمین زمانی‌ نخواهم زد. 

۹. من هیچگاه یادگیری و بهبود توانایی‌های خودم را متوقف نخواهم کرد. 

۲ نظر
android application Google I/O HomeBrew ImageMagick Material Design mobile PogressBar RecyclerView splash SSL Error TEDxKish ux WebView آموزش اندروید الوین تافلر اندروید اپلیکیشن برنامه نویسی برنامه نویسی اندروید برنامه‌نویسی برنامه‌نویسی اندروید تداکس کیش تعمیر تغییر سایز عکس با ترمینال خلاصه کتاب دانش داده دانشگاه دانشگاه ایده‌آل دزد دیتا ساینس رشته مهندسی کامپیوتر فری‌لنس لپتاپ متریال دیزاین معرفی کتاب موج سوم نوار پیشرفت همایش هوش مصنوعی وب ویوو ُجزیره کیش کار کسب و کار یادگیری ماشین