بیا یک سفر به دوران اجداد کم هوشتر کامپیوترهای امروزی داشته باشیم! اون موقع، برنامه نویسا با مشکلات بزرگی دست و پنجه نرم میکردن؛ از جمله اینکه محاسبات سنگین و پیچیده به زمان و منابع زیادی نیاز داشت. اما زمان تغییر کرد و زبانهای برنامه نویسی جدید و قدرتمند به دنیا اومدن تا کار رو برامون راحتتر کنن. یکی از این زبان ها، "Julia" هست که به عنوان یکی از سریعترین و کارآمدترین زبانهای برنامه نویسی برای یادگیری ماشین و محاسبات علمی شناخته میشه.
تصور کن که میخوای یه بازی کامپیوتری بسازی که خودش رو بهبود بده و از تجربیاتش یاد بگیره. بدون Julia و زبانهای مشابه مثل پایتون، این کار ممکنه چندین سال طول بکشه و نیاز به صدها مهندس و برنامه نویس داشته باشه. اما با Julia، میتونی به راحتی و با سرعت بالا به هدفت برسی. Julia دقیقا به همین دلیل طراحی شده؛ تا یادگیری ماشین و محاسبات پیچیده رو برات سادهتر و سریعتر کنه.
بیایید ببینیم چرا Julia برای یادگیری ماشین خیلی خوبه و با ویژگیها و بسته هایی که به شما کمک میکنن شروع به کار کنید، آشنا بشیم.
Julia یه زبان برنامه نویسی نسبتا جدیده که اولین بار در سال 2012 عرضه شد. با اینکه فقط دوازده سال از عمر Julia میگذره، رشد سریعی داشته و الان طبق آخرین شاخص TIOBE در آگوست 2023، برای اولین بار وارد لیست 20 زبان برنامه نویسی برتر شده.
یکی از ویژگیهای برجسته Julia اینه که برای محاسبات علمی ساخته شده. این یعنی Julia هم آسونه و هم سریعه و میتونه حجم زیادی از دادهها و محاسبات پیچیده رو با سرعت بسیار بالا انجام بده. یه شعار معروف درباره Julia اینه که "مثل C اجرا میشه ولی مثل Python خونده میشه."
Julia یه زبان کامپایل شده هست که مثل زبانهای تفسیری خونده میشه. بیشتر زبانهای کامپایل شده سنتی (مثل C یا C++) که قابلیت حل مسائل محاسباتی پیچیده رو دارن، باید اول به یه فرمت قابل خواندن توسط ماشین کامپایل بشن تا اجرا بشن. اما Julia میتونه همون عملکرد رو با سادگی یه زبان تفسیری (مثل Python) داشته باشه، بدون اینکه نیاز باشه قبل از اجرا کامپایل بشه. به جای این، Julia از یه کامپایلر Just-In-Time (JIT) استفاده میکنه که در زمان اجرا کامپایل میشه.
در مقاله زبان برنامه نویسی Julia چیست بیشتر به مفاهیم پایه، ویژگیها و کاربردهای متنوع جولیا پرداختیم و در آخر اون رو با رقیبش پایتون مقایسه کردیم. اگه کنجکاوی بدونی وقت خداحافظی با پایتون رسیده یا نه؟ یه سر به این مقاله بزن. 😉
حالا که میخوایم از Julia بیشتر بدونیم، بهتره یه توضیح کوچیک در مورد زبانهای مفسری و کامپایلری داشته باشیم تا وقتی به بخشهای بعدی رسیدی، راحتتر متوجه بشی.

زبانهای مفسری (Interpreted Languages) اونایی هستن که کدهاشون خط به خط و به صورت مستقیم توسط یه مفسر اجرا میشن. یعنی نیازی به کامپایل (تبدیل به کد ماشین) قبل از اجرا ندارن. هر خط کد نوشته شده رو میخونن، تفسیر میکنن و اجرا میکنن. زبان هایی مثل Python، JavaScript و Ruby از این نوع هستن. خوبی این زبانها اینه که راحتتر و سریعتر میتونی کدها رو بنویسی و اجرا کنی چون نیاز به مرحله کامپایل ندارن. اما این روش معمولاً کمی کندتر از زبانهای کامپایلریه چون هر بار که کد اجرا میشه، باید تفسیر بشه.
زبانهای کامپایلری (Compiled Languages) اونایی هستن که کدهاشون قبل از اجرا به کد ماشین تبدیل میشن. این تبدیل توسط یه کامپایلر انجام میشه و خروجی یه فایل اجرایی (مثل .exe) هست. زبان هایی مثل C، C++ و Rust از این نوع هستن. خوبی این روش اینه که چون کدها قبلاً به کد ماشین تبدیل شدن، اجرای اونها خیلی سریع تره. اما مرحله کامپایل ممکنه زمان بر باشه و نیاز به صرف زمان برای برطرف کردن خطاهای کامپایل وجود داره.
حالا Julia یه ترکیب جالب از این دو دنیاست. Julia یه زبان کامپایلریه که مثل زبانهای مفسری خونده میشه. یعنی کدهاش قبل از اجرا به کد ماشین تبدیل میشن، اما این کار رو به صورت Just-In-Time (JIT) انجام میده. یعنی در زمان اجرا و درست زمانی که نیاز باشه، کدها رو کامپایل میکنه. اینجوری میتونه سرعت بالا رو با سادگی و راحتی زبانهای مفسری ترکیب کنه.
Python مدت هاست که در زمینه علم داده و یادگیری ماشین سلطه داره و دلیل خوبی هم داره. Python یه زبان برنامه نویسی فوق العاده قدرتمند و منعطفه. اما Julia برخی از نقاط ضعف Python رو نداره و این یه برتری بزرگه.
بعضی از مشکلات Python در مقایسه با Julia عبارتند از:
یکی از بهترین چیزهای Julia اینه که نحو خیلی دوستانه ای داره که به زبان انگلیسی نزدیکه. این باعث میشه یادگیری و استفاده ازش خیلی سریع و راحت باشه. کدهایی که با Julia مینویسی، خیلی شهودی و قابل فهم هستن و این یه مزیت بزرگه.
علاوه بر این، نصب و شروع به کار با Julia خیلی آسونه. نیازی به نصب توزیعهای خاص مثل Python و Anaconda نداری و همین طور لازم نیست فرآیند نصب پیچیده ای مثل C و C++ رو طی کنی.
برای کسانی که تو زمینه یادگیری ماشین کار میکنن، این یعنی زودتر میتونن از مرحله برنامه نویسی بگذرن و به تحلیل دادهها و ساخت مدلها برسن.
یکی از ویژگیهای برجسته Julia سرعتشه. این زبان کامپایل شده هست و سرعت خیلی بیشتری نسبت به زبانهای تفسیری داره. Julia عضوی از "کلوب پتافلاپ" است، همراه با C، C++، و Fortran. این کلوب انحصاری فقط چهار عضو داره و یه شرط برای عضویت: رسیدن به سرعت یک پتافلاپ (یعنی یک هزار تریلیون عملیات) در ثانیه در اوج عملکرد.
تو یادگیری ماشین، برخورد با حجم زیادی از دادهها رایجه. بنابراین استفاده از یه زبان برنامه نویسی سریع میتونه زمان آموزش رو به طور قابل توجهی بهبود ببخشه و هزینهها رو در هنگام پیاده سازی مدلها کاهش بده.
یکی دیگه از ویژگیهای جالب Julia اینه که نیازی به برداری کردن کد برای افزایش عملکرد نیست. نوشتن کد غیر برداری به صورت حلقهها و توابع بومی، از قبل سریعه. در حالی که برداری کردن کد در Julia ممکنه باعث بهبود کمی در سرعت بشه، اما ضروری نیست.
این یعنی میتونی خیلی وقتت رو هنگام ساخت مدلهای یادگیری ماشین ذخیره کنی چون نیازی به بازنویسی کد برای بهبود سرعت نداری.
Julia از نوع گذاری شبیه به اردک (duck-typing) برای "حدس زدن" نوع مناسب برای یه تابع استفاده میکنه. این ویژگی یعنی: اگه یه چیزی مثل اردک راه میره و مثل اردک صدا میده، احتمالاً یه اردکه! یعنی هر شیء که ویژگیهای مورد نیاز یه تابع رو داشته باشه، میتونه به اون تابع پاس داده بشه بدون نیاز به تعریف صریح نوعش.
اما گاهی اوقات، نوع گذاری شبیه به اردک کافی نیست، و اینجاست که قابلیت اعزام چندگانه (Multiple Dispatch) به کار میاد. با استفاده از این ویژگی، میتونی برای یه تابع چندین نسخه تعریف کنی که هر کدوم برای نوع خاصی از ورودیها بهینه سازی شده باشن. در زمان اجرا، Julia به صورت خودکار بر اساس نوع داده هایی که به تابع پاس داده شدن تشخیص میده که کدوم نسخه از تابع باید اجرا بشه.
این قابلیت توی یادگیری ماشین خیلی کاربردیه، چون نیازی نیست که برای هر نوع داده ای که ممکنه به یه تابع پاس داده بشه، نسخه جداگانه ای از تابع رو بنویسی. به این ترتیب، بستههای Julia میتونن خیلی انعطاف پذیر باشن و انواع مختلف دادهها رو به راحتی مدیریت کنن، بدون اینکه لازم باشه کدهای تکراری نوشته بشه. این موضوع به اشتراک گذاری کد و نوعها بین بستههای مختلف کمک میکنه و کار رو برای برنامه نویسا سادهتر میکنه.
مدیریت بستهها در Julia به طور خودکار با Pkg انجام میشه. Pkg برای Julia مثل Pip برای Python هست، ولی خیلی بهتره. محیطها در Julia از طریق دو فایل مدیریت میشن: Project.toml و Manifest.toml. این فایلها به Julia میگن که کدوم بستهها در پروژه استفاده شدن و نسخه هاشون چیه. به جای تعریف محیطهای خاص به صورت خارجی، مکان پوشه فایلهای Julia (که حاوی فایلهای Project و Manifest toml هست) به محیط تبدیل میشه.
این نوع مدیریت ساده و داخلی بسته ها، اشتراک گذاری و بازتولید پروژهها و تحلیلهای یادگیری ماشینت رو آسونتر میکنه.
آیا میدونستی که فقط 20-30% از بستههای Python واقعا از کد Python ساخته شدن؟
این وابستگی به زبانهای دیگه به این دلیله که برای توسعه بسته هایی که کارآمد و مؤثر در وظایفشون هستن، باید به زبانهای سطح پایین مثل C و C++ ساخته بشن.
این بستهها از این زبانها استفاده میکنن چون در محاسبات علمی، توسعه راه حلها و بستهها معمولا شامل دو زبان برنامه نویسیه: زبان پروتوتایپ آسون (مثل Python) برای ساخت یه پیاده سازی سریع اولیه از راه حل و سپس زبان سریع (مثل C++) که همه کدها دوباره به اون زبان نوشته میشن برای نسخه نهایی راه حل.
همونطور که میتونی تصور کنی، این یه فرآیند کند و ناکارآمده نه فقط برای توسعه اولیه بلکه برای نگهداری بلندمدت و ویژگیهای جدید.
از طرف دیگه، بستههای Julia میتونن در Julia پروتوتایپ، توسعه و نگهداری بشن. در نتیجه، این کل چرخه توسعه رو به فقط بخشی از زمان کاهش میده.

تا الان Julia بیش از 7400 پکیج تو رجیستری عمومی خودش داره. درسته که این تعداد خیلی کمتر از پکیجهای موجود برای Python (بیش از 200,000 تا) هست، ولی پیدا کردن پکیج مناسب برای یه مشکل خاص همچنان میتونه چالش برانگیز باشه.
اگه تازه با یادگیری ماشین در Julia شروع کردی، پیشنهاد میکنم اول از پکیج MLJ استفاده کنی. این پکیج به طور خاص ساخته شده تا معروفترین پکیجهای یادگیری ماشین رو در یه جای راحت جمع کنه و وقتت رو برای پیدا کردن بهترین پکیج برای پروژه ت ذخیره کنه. MLJ الان از بیش از 20 پکیج مختلف یادگیری ماشین پشتیبانی میکنه.
این زیر لیستی از بعضی پکیجهای رایجی که ممکنه تو پروژههای یادگیری ماشین باهاشون برخورد کنی رو میبینی. از وارد کردن، تمیز کردن و بصری سازی دادهها تا ساخت مدل ها:
○ مدلهای خطی عمومی (مثل رگرسیون خطی و لجستیک): GLM
○ یادگیری عمیق: Flux، Knet
○ ماشینهای بردار پشتیبانی: LIBSVM
○ درخت تصمیم، جنگل تصادفی، AdaBoost: DecisionTree
○ نزدیکترین همسایه: NearestNeighbors
○ خوشه بندی K-means: Clustering
○ تحلیل مولفههای اصلی: MultivariateStats
یکی از بهترین راهها برای شروع کار با Julia استفاده از محیط دفترچه یادداشت Pluto است. Pluto یه محیط تعاملی ساده با رابط کاربری دوستانه ست که برای مبتدیان خیلی مناسبه. Pluto ویژگیهای اضافی زیادی داره که بهت اجازه میده تا راه حلهای یادگیری ماشین رو به راحتی و جذاب بسازی:
خب، حالا که با Julia و ویژگی هاش آشنا شدیم، وقتشه که بریم سراغ یه سری مثال عملی تا یادگیری ماشین رو با این زبان تجربه کنیم. با هم چند مدل یادگیری ماشین رو با کدهای ساده و کاربردی بررسی میکنیم. آماده ای؟ بزن بریم!
اول باید پکیجهای مورد نیازمون رو نصب کنیم. برای این کار از Pkg استفاده میکنیم:
using Pkg
Pkg.add("MLJ")
Pkg.add("DataFrames")
Pkg.add("CSV")فرض کنیم یه فایل CSV داریم که اطلاعات مربوط به دانش آموزان و نمراتشون رو ذخیره کرده. باید این دادهها رو بارگذاری کنیم:
using CSV
using DataFrames
# بارگذاری دادهها از فایل CSV
data = CSV.File("students_scores.csv") |> DataFrame
# نمایش چند خط اول داده ها
first(data, 5)حالا باید دادهها رو آماده کنیم. مثلاً اگه دادههای گم شده داریم، باید اونها رو مدیریت کنیم. تو این مثال فرض میکنیم دادهها کامل هستن.
یکی از مراحل مهم در یادگیری ماشین، تقسیم دادهها به دو بخش آموزش و تست هست. اینجوری میتونیم مدل مون رو روی دادههای جدید امتحان کنیم.
using MLJ
# تقسیم دادهها به آموزش و تست
train, test = partition(eachindex(data), 0.8, shuffle=true)
train_data = data[train, :]
test_data = data[test, :]بیاید با یه مدل رگرسیون خطی ساده شروع کنیم. فرض کنیم میخوایم رابطه بین ساعتهای مطالعه و نمرات دانش آموزان رو بررسی کنیم.
using MLJ
using MLJLinearModels
# تعریف مدل رگرسیون خطی
model = LinearRegressor()
# آماده سازی ویژگیها و هدف
X_train = select(train_data, Not(:Grade))
y_train = train_data.Grade
# آموزش مدل
mach = machine(model, X_train, y_train)
fit!(mach)حالا که مدل رو آموزش دادیم، باید عملکردش رو روی دادههای تست بررسی کنیم:
# آماده سازی دادههای تست
X_test = select(test_data, Not(:Grade))
y_test = test_data.Grade
# پیش بینی نمرات با مدل آموزش دیده
y_pred = predict(mach, X_test)
# محاسبه خطای میانگین مربعات (MSE)
mse = mean((y_pred .- y_test).^2)
println("Mean Squared Error: $mse")توضیحات کد
مدل درخت تصمیم یه الگوریتم یادگیری ماشین برای دسته بندی داده هاست. بیاید یه مدل درخت تصمیم بسازیم و باهاش کار کنیم:
Pkg.add("DecisionTree")
using DecisionTree
# آماده سازی ویژگیها و هدف
X = select(data, Not(:species))
y = data.species
# تقسیم دادهها به آموزش و تست
train, test = partition(eachindex(data), 0.7, shuffle=true)
X_train = X[train, :]
y_train = y[train]
X_test = X[test, :]
y_test = y[test]
# ساخت و آموزش مدل درخت تصمیم
model = DecisionTreeClassifier()
fit!(model, X_train, y_train)
# پیش بینی کلاسهای جدید
y_pred = predict(model, X_test)
# ارزیابی مدل
accuracy = mean(y_pred .== y_test)
println("Accuracy: $accuracy")توضیحات کد
الگوریتم K-means برای خوشه بندی دادهها استفاده میشه. بیاید این الگوریتم رو روی دادههای گلهای Iris پیاده کنیم:
Pkg.add("Clustering")
using Clustering
# آماده سازی ویژگی ها
X = Matrix(select(data, Not(:species)))
# اجرای الگوریتم K-means
kmeans_result = kmeans(X, 3)
# نمایش خوشههای هر داده
println("Cluster assignments for each data point:")
println(kmeans_result.assignments)
# نمایش مراکز خوشه ها
println("Cluster centers:")
println(kmeans_result.centers)
# اضافه کردن خوشهها به داده ها
data.cluster = kmeans_result.assignments
println("Data with cluster assignments:")
first(data, 5)توضیحات کد
حالا با این سه مثال، شما میتونید:
امیدوارم این مثالها بهتون کمک کنه تا بیشتر با یادگیری ماشین در Julia آشنا بشید و پروژههای خودتون رو شروع کنید! هر سوالی هم داشتید، حتماً بپرسید. 😊
اینها بعضی از منابع توصیه شده برای یادگیری زبان برنامه نویسی Julia و استفاده از اون در علم داده و یادگیری ماشین هستن:

بله، Julia به دلیل سرعت بالا و کتابخانههای گسترده، یکی از بهترین زبانها برای یادگیری ماشینه. این زبان بهت اجازه میده تا الگوریتمهای پیچیده رو با سرعت بالا پیاده سازی کنی و به سرعت به نتایج برسی.
برای یادگیری Julia، میتونی از منابع آموزشی آنلاین، کتابها و مستندات رسمی استفاده کنی. وب سایت هایی مثل Coursera، Udemy و YouTube دارای دورههای آموزشی بسیاری هستن که بهت در یادگیری Julia کمک میکنن.
این موضوع بستگی به نیازها و کاربردهای تو داره. Julia به دلیل سرعت بالای خودش برای محاسبات علمی و یادگیری ماشین خیلی مناسبه، در حالی که Python به دلیل جامعه کاربری بزرگ و کتابخانههای گسترده برای خیلی از کاربردها انتخاب خوبیه.
توی این مقاله با Julia، یکی از زبانهای برنامه نویسی قدرتمند برای یادگیری ماشین و محاسبات علمی آشنا شدیم.
Julia به خاطر سرعت بالا و کتابخانههای قدرتمندش یه انتخاب عالی برای پروژههای یادگیری ماشینه. یادگیری این زبان میتونه در کوتاهترین زمان ممکن، کارایی و سرعت کارتون رو بهبود بده.
حالا نوبت شماست که با تمرین و استفاده از کدها و مثال هایی که دیدید، مهارت هاتون رو توی این زبان جذاب تقویت کنید. مطمئنم با تلاش و پشتکار میتونید پروژههای خفنی رو با Julia انجام بدید.
هر سوالی هم داشتید، حتماً بپرسید. موفق باشید و از یادگیری لذت ببرید! 😊
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: