Напишите линейную регрессию на Python с нуля
Это один из самых простых алгоритмов. Он включает следующие шаги:
1️⃣ Инициализация параметров.
2️⃣ Вычисление предсказаний.
3️⃣ Вычисление функции потерь.
4️⃣ Обновление параметров с помощью градиентного спуска.
5️⃣ Повторение до сходимости.
#машинное_обучение
#программирование
Это один из самых простых алгоритмов. Он включает следующие шаги:
import numpy as np
class LinearRegression:
def __init__(self, learning_rate=0.01, n_iters=1000):
self.learning_rate = learning_rate
self.n_iters = n_iters
def fit(self, X, y):
n_samples, n_features = X.shape
self.weights = np.zeros(n_features)
self.bias = 0
for _ in range(self.n_iters):
model_preds = self.predict(X)
dw = (1 / n_samples) * np.dot(X.T, (model_preds - y))
db = (1 / n_samples) * np.sum(model_preds - y)
self.weights -= self.learning_rate * dw
self.bias -= self.learning_rate * db
def predict(self, X):
return np.dot(X, self.weights) + self.bias
#машинное_обучение
#программирование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Напишите код, который будет иллюстрировать Закон больших чисел (ЗБЧ)
ЗБЧ утверждает, что при увеличении количества попыток случайная величина стремится к своему математическому ожиданию. Для иллюстрации возьмём подбрасывание честной монетки. Математическое ожидание выпадения орла равно 0.5. С увеличением числа подбрасываний среднее значение количества выпавших орлов должно приближаться к 0.5.
#программирование
#теория_вероятностей
ЗБЧ утверждает, что при увеличении количества попыток случайная величина стремится к своему математическому ожиданию. Для иллюстрации возьмём подбрасывание честной монетки. Математическое ожидание выпадения орла равно 0.5. С увеличением числа подбрасываний среднее значение количества выпавших орлов должно приближаться к 0.5.
import random
import matplotlib.pyplot as plt
total_flips = 0
numerical_probability = []
H_count = 0
for i in range(0, 5000):
new_flip = random.choice(['H', 'T'])
total_flips += 1
if new_flip == 'H':
H_count += 1
numerical_probability.append(H_count / total_flips)
plt.figure(figsize=(10, 6))
plt.plot(numerical_probability, label='Численная вероятность орла')
plt.axhline(y=0.5, color='r', linestyle='-', label='Математическое ожидание (0.5)')
plt.xlabel("Количество бросков")
plt.ylabel("Численная вероятность орла")
plt.title("Закон больших чисел: Подбрасывание монеты")
plt.legend()
plt.show()
#программирование
#теория_вероятностей
👍7🔥3
Объясните разницу между списком и кортежем?
▫️Список — это упорядоченная коллекция элементов. Элементы могут иметь любой тип. При этом коллекцию можно изменять: вставить новый элемент, удалить старый и т.д. То есть длина у списка динамическая — при необходимости Python будет выделять новую память.
Список создаётся через квадратные скобки.
▫️Кортеж — это тоже упорядоченная коллекция элементов. Элементы тоже могут иметь любой тип. Однако изменять кортеж нельзя. Кроме того, в памяти Python пустой кортеж — всегда в единственном экземпляре. Пустые списки же каждый раз создаются заново.
Кортеж создаётся через круглые скобки.
#программирование
#python
▫️Список — это упорядоченная коллекция элементов. Элементы могут иметь любой тип. При этом коллекцию можно изменять: вставить новый элемент, удалить старый и т.д. То есть длина у списка динамическая — при необходимости Python будет выделять новую память.
Список создаётся через квадратные скобки.
▫️Кортеж — это тоже упорядоченная коллекция элементов. Элементы тоже могут иметь любой тип. Однако изменять кортеж нельзя. Кроме того, в памяти Python пустой кортеж — всегда в единственном экземпляре. Пустые списки же каждый раз создаются заново.
Кортеж создаётся через круглые скобки.
#программирование
#python
😢3
Какие магические методы в Python вы знаете?
Магическими методами в Python называют встроенные методы с двойными подчёркиваниями (например, `__init__`, `__str__`). Они позволяют определять поведение классов для различных операций.
Вот несколько магических методов для примера:
▫️`__init__` — для инициализации нового объекта;
▫️`__del__` — деструктор, который вызывается при удалении объекта;
▫️`__str__` — определяет поведение функции `str()`, вызванной для экземпляра вашего класса;
▫️`__len__` — возвращает длину объекта;
▫️`__eq__` — определяет поведение оператора равенства `==`;
▫️`__iter__` — возвращает итератор для объекта;
▫️`__getitem__` — получение значения по ключу или индексу;
▫️`__call__` — позволяет объекту класса вести себя как функция.
#программирование
#python
Магическими методами в Python называют встроенные методы с двойными подчёркиваниями (например, `__init__`, `__str__`). Они позволяют определять поведение классов для различных операций.
Вот несколько магических методов для примера:
▫️`__init__` — для инициализации нового объекта;
▫️`__del__` — деструктор, который вызывается при удалении объекта;
▫️`__str__` — определяет поведение функции `str()`, вызванной для экземпляра вашего класса;
▫️`__len__` — возвращает длину объекта;
▫️`__eq__` — определяет поведение оператора равенства `==`;
▫️`__iter__` — возвращает итератор для объекта;
▫️`__getitem__` — получение значения по ключу или индексу;
▫️`__call__` — позволяет объекту класса вести себя как функция.
#программирование
#python
🔥7❤3
Что такое args, kwargs. В каких случаях они требуются?
В Python оператор * используется не только для умножения, но и для того, чтобы «распаковывать» объекты, внутри которых хранятся некие элементы. Именно эта его особенность применяется в случае с args и kwargs.Можно использовать другие имена, но это считается дурным тоном. args — это сокращение от arguments (аргументы), а kwargs — сокращение от keyword arguments (именованные аргументы).
Соответственно, мы используем *args, когда не уверены, сколько аргументов будет передано функции, или если хотим передать список или кортеж аргументов функции. А **kwargs мы используем, когда не знаем, сколько именованных аргументов будет передано функции. В последнем случае, в виду того, что речь идёт об именованных аргументах, применяется словарь, где ключ — имя параметра, значение — значение параметра.
#python
#программирование
В Python оператор * используется не только для умножения, но и для того, чтобы «распаковывать» объекты, внутри которых хранятся некие элементы. Именно эта его особенность применяется в случае с args и kwargs.
Соответственно, мы используем *args, когда не уверены, сколько аргументов будет передано функции, или если хотим передать список или кортеж аргументов функции. А **kwargs мы используем, когда не знаем, сколько именованных аргументов будет передано функции. В последнем случае, в виду того, что речь идёт об именованных аргументах, применяется словарь, где ключ — имя параметра, значение — значение параметра.
#python
#программирование
👍6
Что такое генераторы и итераторы в Python?
В Python генераторы и итераторы — это объекты, позволяющие работать с потенциально большими последовательностями данных без необходимости загружать всё в память одновременно. То есть и генераторы, и итераторы позволяют перебирать элементы коллекций.
🔹Итераторы реализуют методы __iter__() и __next__(). Метод __iter__() возвращает сам итератор, а __next__() — следующий элемент коллекции. Если элементы заканчиваются, __next__() должен вызвать исключение StopIteration.
🔹Генераторы представляют собой специальный способ реализации итераторов. Их можно реализовать двумя способами: как функцию с ключевым словом yield или как генераторное выражение. Главное отличие генератора от итератора заключается в том, что значения генерируются по требованию. Каждый раз, когда генератор достигает yield, он возвращает значение и «замирает», сохраняя своё состояние до следующего вызова. Это позволяет использовать меньше памяти при итерации по длинным последовательностям. Канонический пример — генератор, порождающий последовательность чисел Фибоначчи.
#программирование
#python
В Python генераторы и итераторы — это объекты, позволяющие работать с потенциально большими последовательностями данных без необходимости загружать всё в память одновременно. То есть и генераторы, и итераторы позволяют перебирать элементы коллекций.
🔹Итераторы реализуют методы __iter__() и __next__(). Метод __iter__() возвращает сам итератор, а __next__() — следующий элемент коллекции. Если элементы заканчиваются, __next__() должен вызвать исключение StopIteration.
🔹Генераторы представляют собой специальный способ реализации итераторов. Их можно реализовать двумя способами: как функцию с ключевым словом yield или как генераторное выражение. Главное отличие генератора от итератора заключается в том, что значения генерируются по требованию. Каждый раз, когда генератор достигает yield, он возвращает значение и «замирает», сохраняя своё состояние до следующего вызова. Это позволяет использовать меньше памяти при итерации по длинным последовательностям. Канонический пример — генератор, порождающий последовательность чисел Фибоначчи.
#программирование
#python
👍4❤1
Напишите функцию для вычисления евклидова расстояния
Вот две точки для примера:
Решение:
#python
#программирование
Вот две точки для примера:
plot1 = [1,3]
plot2 = [2,5]
Решение:
def euclidean_dist(point1, point2):
return ((point1[0] - point2[0])**2 + (point1[1] - point2[1])**2)**0.5
point1, point2 = [1, 3], [2, 5]
print(euclidean_dist(point1, point2)) # -> 2.23606797749979
#python
#программирование
👍6🥱5
Какова разница между == и is в Python?
🔘 == проверяет равенство значений двух объектов. Он возвращает True, если объекты имеют одинаковые значения, даже если они занимают разные места в памяти.
🔘 is проверяет, указывают ли две переменные на один и тот же объект в памяти.
Рассмотрим пример:
В первом случае lst == lst[:] возвращает True, потому что срез lst[:] создаёт новый список с теми же значениями, что и у оригинального списка lst.
Во втором случае lst is lst[:] возвращает False, так как lst[:] создает новый объект в памяти, который имеет те же значения, но является другим объектом.
#python
#программирование
Рассмотрим пример:
lst = [10, 20, 20]
print(lst == lst[:]) # True
print(lst is lst[:]) # False
В первом случае lst == lst[:] возвращает True, потому что срез lst[:] создаёт новый список с теми же значениями, что и у оригинального списка lst.
Во втором случае lst is lst[:] возвращает False, так как lst[:] создает новый объект в памяти, который имеет те же значения, но является другим объектом.
#python
#программирование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1🤔1
Что такое JAX?
JAX — это фреймворк для вычислений и исследований в области машинного обучения. Он предоставляет API, совместимое с NumPy, и поддерживает автоматическое дифференцирование, векторизацию, параллелизацию и компиляцию в реальном времени для GPU/TPU. JAX ориентирован на скорость и производительность и подходит для обучения больших моделей, требующих мощных ускорителей.
🔗 Ссылка на документацию JAX
#программирование
JAX — это фреймворк для вычислений и исследований в области машинного обучения. Он предоставляет API, совместимое с NumPy, и поддерживает автоматическое дифференцирование, векторизацию, параллелизацию и компиляцию в реальном времени для GPU/TPU. JAX ориентирован на скорость и производительность и подходит для обучения больших моделей, требующих мощных ускорителей.
🔗 Ссылка на документацию JAX
#программирование
👾5👍4
Назовите алгоритмическую сложность следующих структур данных: список, словарь, очередь, множество
▪️Список (List)
Позволяет хранить последовательность элементов, поддерживает доступ по индексу.
Операция поиска (доступа к элементу): O(1);
Вставка или удаление элемента: O(n) в худшем случае.
▪️ Словарь (Dictionary)
Позволяет хранить пары «ключ-значение» и обеспечивает быстрый доступ к значениям по ключу.
Операция поиска, вставки и удаления элемента: O(1) в среднем, O(n) в худшем случае при коллизиях.
▪️ Очередь (Queue)
Поддерживает порядок «первым пришёл — первым вышел» (FIFO).
Операция добавления и удаления элемента: O(1).
▪️ Множество (Set)
Хранит уникальные элементы и обеспечивает быстрые операции проверки наличия элемента.
Операция поиска, вставки и удаления элемента: O(1) в среднем, O(n) в худшем случае
#программирование
▪️Список (List)
Позволяет хранить последовательность элементов, поддерживает доступ по индексу.
Операция поиска (доступа к элементу): O(1);
Вставка или удаление элемента: O(n) в худшем случае.
▪️ Словарь (Dictionary)
Позволяет хранить пары «ключ-значение» и обеспечивает быстрый доступ к значениям по ключу.
Операция поиска, вставки и удаления элемента: O(1) в среднем, O(n) в худшем случае при коллизиях.
▪️ Очередь (Queue)
Поддерживает порядок «первым пришёл — первым вышел» (FIFO).
Операция добавления и удаления элемента: O(1).
▪️ Множество (Set)
Хранит уникальные элементы и обеспечивает быстрые операции проверки наличия элемента.
Операция поиска, вставки и удаления элемента: O(1) в среднем, O(n) в худшем случае
#программирование
👍3❤2
Напишите простую функцию для реализации алгоритма KNN (K ближайших соседей)
Смотрите на картинке👆
Это не самая оптимальная реализация без векторизации, однако она иллюстрирует понимание алгоритма.
#программирование
#машинное_обучение
Смотрите на картинке👆
Это не самая оптимальная реализация без векторизации, однако она иллюстрирует понимание алгоритма.
#программирование
#машинное_обучение
❤5
В чём разница между модулем, пакетом и библиотекой в Python?
▪️Модуль
Это файл с расширением .py, содержащий код Python (функции, классы, переменные). Он используется для структурирования и повторного использования кода. Модуль можно импортировать.
▪️Пакет
Это директория, содержащая набор модулей и файл , который указывает, что эта директория является пакетом. Пакеты позволяют группировать модули по логике или функциональности.
▪️Библиотека
Это набор модулей и/или пакетов, предназначенных для решения определённого класса задач. Обычно библиотека распространяется как единое целое, например, через PyPI.
#python
#программирование
__init__.py
#python
#программирование
👍4