algoroots
105 subscribers
5 photos
2 videos
5 files
6 links
جایی برای تقویت ذهن الگوریتمی با
الگوریتم های کاربردی در حوزه های جذاب
Download Telegram
lecture_notes.pdf
989.7 KB
carnegie mellon جزوه ی مبانی رمز دانشگاه
🤔21
algoroots
lecture_notes.pdf
مناسب برای یادگیری الگوریتم های رمز

#cryptography
2
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report

iris=load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)

y_pred=model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")
print("\nClassification Report:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))
2
Chip_Huyen_Designing_Machine_Learning_Systems_An_Iterative_Process.pdf
15.5 MB
کتابی برای پیاده سازی سیستم های ماشین لرنینگ به صورت واقعی و عملی
#Ml
3
🤔الگوریتم k-means

یک الگوریتم کلاسیک و مهم در یادگیریه بدون نظارت که در خوشه بندی استفاده میشود.

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


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

#ML
👍41
import numpy as np

def initialize_centroids(X, k):
indices = np.random.choice(len(X), size=k, replace=False)
return X[indices]

def assign_clusters(X,centroids):
distances = np.linalg.norm(X[:, np.newaxis] -centroids, axis=2)
return np.argmin(distances, axis=1)

def update_centroids(X, labels, k):
return np.array([X[labels== i].mean(axis=0) for i in range(k)])

def has_converged(old_centroids, new_centroids, tolerance=1e-4):
shifts = np.linalg.norm(new_centroids - old_centroids, axis=1)
return np.all(shifts < tolerance)

def kmeans(X, k, max_iterations=100):
centroids=initialize_centroids(X, k)

for _ in range(max_iterations):
labels = assign_clusters(X, centroids)
new_centroids = update_centroids(X, labels, k)

if has_converged(centroids, new_centroids):
break

centroids=new_centroids

return centroids, labels
1
◻️ارزیابی Silhouette Score :

یکی از بهترین ارزیابی ها برای خوشه بندی

اندازه‌گیری میزان شباهت هر نقطه به خوشه اش نسبت به خوشه های دیگر

مقدار در بازه ی [1,1-]
نزدیک به 1 یعنی خوشه بندی عالی
نزدیک به صفر یعنی نقاط بین دو خوشه است
نزدیک به 1- یعنی اشتباه در خوشه بندی
#ML
👍21
import numpy as np
from collections import Counter

def euclidean_distance(a, b):
return np.sqrt(np.sum((a-b) ** 2))

class KNN:
def __init__(self, k=3):
self.k = k

def fit(self, X, y):
self.X_train = X
self.y_train = y

def predict(self, X):
return [self._predict(x) for x in X]

def _predict(self, x):

distances = [euclidean_distance(x, x_train) for x_train in self.X_train]

k_indics = np.argsort(distances)[:self.k]

k_nearest_labels = [self.y_train[i] for i in k_indics]

most_common = Counter(k_nearest_labels).most_common(1)
return most_common[0][0]
1
algoroots
import numpy as np from collections import Counter def euclidean_distance(a, b): return np.sqrt(np.sum((a-b) ** 2)) class KNN: def __init__(self, k=3): self.k = k def fit(self, X, y): self.X_train = X self.y_train = y…
◼️برای هر نمونه از حلقه های for تو در تو نباید استفاده شه
◽️راهکار جایگزین بردارسازی با نامپای هست

◽️برای تصادفی نشدن نتایج در کلاس ها با رأی برابر شرطی کردن روش خوبی است
بخصوص بررسی میانگین

◽️معیار F1_score حتما در کنار سه معیار شاخص بررسی شود

◽️مقدار خیلی کوچک K باعث نویز میشود
و بزرگ آن دقت را کم میکند
بهینه سازی با Cross_validatiam راهکار خوبی است


رعایت این نکات الگوریتم را بسیار بهینه میکند .

#ML
#python
1👍1
الگوریتم ژنتیک(GA) :

الگوریتمی برای جست و جوی تصادفی با استفاده از تکامل زیستی

عملکرد کلی :

◽️جمعیت اولیه:
از پاسخ های تصادفی به نام کروموزوم ها استفاده میکنیم

◽️ارزیابی:
با استفاده از یک تابع هدف کیفیت هر کروموزوم سنجیده میشود

◽️انتخاب :
کروموزوم های بهتر با احتمال بیشتر برای تولید مثل انتخاب میشوند

◽️کراس اور :
ترکیب دو کروموزوم برای تولید فرزندان جدید

◽️جهش :
برای جلوگیری از گیرافتادن در مینیمم های محلی به طور تصادفی ژن ها در کروموزوم ها تغییر می‌کنند

◽️تکامل نسل :
تکرار مراحل تا به یک شرط توقف یا جواب بهینه برسیم

ویژگی :
عملکرد قوی در فضاهای پیچیده
مناسب برای مسائل غیرخطی و پیچیده
1🔥1
import random

def fitness(x):
return x**2


def decode(chromosome, a, b, bits):
value =int(chromosome, 2)
return a + (b - a) * value / (2**bits - 1)


def random_chromosome(bits):
return ''.join(random.choice('01') for_in range(bits))


def selection(population, scores):
k = 3
selected = random.choices(list(zip(population, scores)), k=k)
selected.sort(key=lambda x: x[1], reverse=True)
return selected[0][0]

def crossover(p1, p2, rate=0.7):
if random.random() < rate:
point = random.randint(1, len(p1) - 1)
return p1[:point] + p2[point:], p2[:point] + p1[point:]
return p1, p2


def mutate(chromosome, rate=0.01):
return ''.join(
bit if random.random() > rate else ('1' if bit == '0' else '0')
for bit in chromosome
)


bits = 10
bounds = (-10, 10)
population_size = 20
generations = 50

population = [random_chromosome(bits) for _ in range(population_size)]


for gen in range(generations):
decoded = [decode(c, *bounds, bits) for c in population]
scores=[fitness(d) for d in decoded]


best_idx = scores.index(max(scores))
print(f"{gen}: x = {decoded[best_idx]:.3f}, f(x) = {scores[best_idx]:.3f}")


select = [selection(population, scores) for _ in range(population_size)]


children = [ ]
for i in range(0, population_size, 2):
p1, p2 = select[i], select[i+1]
c1, c2 =crossover(p1, p2)
c1, c2 =mutate(c1), mutate(c2)
children.extend([c1, c2])

population = children
2
algoroots
ساختار این الگوریتم برای یافتن بیشینه ی تابع درجه دوم #python
جایگزین کردن numpy.array به جای str ها برای بهینه کردن سرعت

اگر تابع fitness سنگین باشد باید از memorization استفاده
ارزیابی مکرر پرهزینه است

طراحی کلاس برای کروموزوم بسیار مناسب است(OOP)

اگر نرخ جهش بالا باشد
الگوریتم شبیه جستجوی تصادفی می‌شود

نداشتن تنوع در جمعیت موجب گیرافتادن در بهینه ی محلی می‌شود(مهم)

رعایت این نکات الگوریتم را بسیار بهینه میکند
1🤔1
def is_prime(n):
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True

def next_prime(n):
candidate = n + 1
while not is_prime(candidate):
candidate += 1
return candidate

def sum_with_next_prime(num):
if is_prime(num):
next = next_prime(num)
result =num +next
print(f"{num} is a prime Sum with the next prime {next} is: {result}")
else:
print(f"{num} is not a prime")

number=int(input("Enter a number: "))
sum_with_next_prime(number)
2🔥1
algoroots
def is_prime(n): if n <= 1: return False if n <= 3: return True if n % 2 == 0 or n % 3 == 0: return False i = 5 while i * i <= n: if n % i == 0 or n % (i + 2) == 0: return False i += 6…
#python
الگوریتمی جالب
عدد را دریافت و اگر اول بود آن را با عدد اول بعدی اش جمع میکند
🔥21
عدم پشتیبانی از اعداد بزرگ در این الگوریتم ها به چشم میخورد
که برای پیاده سازی های بزرگ مشکل است
1👍1🤔1