CodeLab
145 subscribers
538 photos
20 videos
159 links
Говорим просто о сложном

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
ВЕРНУТЬСЯ К НАВИГАЦИИ

🧑‍💻 Что насчет последней строки вывода?

print('w_1=%.5f, w_2=%.3f' % (w[0][0], w[1][0]))


🔵'w_1=%.5f, w_2=%.3f' — это форматированная строка, которая определяет, как будут выведены значения w₀ и w₁

🔵% — оператор, который связывает строку с указанными значениями из скобок (w[0][0], w[1][0])

🔵w — это результат вычисления коэффициентов линейной регрессии. Это матрица (или двумерный массив) размером 2×1

🔗 Теперь поговорим о каждом подробнее:

🔵%.5f — форматирует w₀ как число с плавающей точкой (дробное число), ( .5 указывает, что нужно вывести 5 цифр после запятой.)

🔵%.3f — форматирует w₁ как число с плавающей точкой ( .3 указывает, что нужно вывести 3 цифры после запятой.)

⚙️ Что касается наших получившихся значений?

🔵 w[0][0] — это первый элемент матрицы w₀

🔵w[1][0] — это второй элемент матрицы w₁

🔗 w₀ и w₁ зависят от распределения входных данных (их значений и количества)

Вывод:

w₀ = -17,5
w₁ = 0.714


ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍1🤯1🤡1🤓1
ВЕРНУТЬСЯ К НАВИГАЦИИ

🔗 Разбираем следующий блок кода:

margin = 10
X_min = X[:, 1].min() - margin
X_max = X[:, 1].max() + margin


1⃣🔵margin — отступ для улучшения вида графика (в комментах скину оба графика (с margin) и (без margin))

margin = 10


2⃣🔵X[:, 1] — извлекает значения площади из X (Вторая колонка, где речь идет про площадь)

🔵X_min и X_max — минимальное и максимальное значение площади с добавлением отступов (отступ как раз margin).

X_min = X[:, 1].min() - margin


🔵.min() — берется минимальное значение в этом столбце (у нас это 50).

🔵margin — уменьшается минимальное значение на 10 для расширения границы слева. (50 - 10 = 40)

🔵Если говорить про X_max, то тут напротив, берется максимальное значение в столбце X (у нас это 100), а затем + margin (то есть + 10), получаем 110

ВЕРНУТЬСЯ К НАВИГАЦИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍2🤡1🤓1
📈 Создаем точки для нашей линии:

🔗 Создаем 100 равномерно распределенных точек между X_min и X_max, это точки для оси x, по которым строится прямая.

X_support = np.linspace(X_min, X_max, num=100)


⚙️ Вычисляем значения y для всех точек из X_support (применяя уравнение регрессии y = w₀ + w₁ * x)

Y_model = w[0][0] + w[1][0] * X_support


📊 Теперь настраиваем график:

plt.figure(figsize=(8, 6)) # Создает график размером 8x6 дюймов


🔗 Задаем диапазон по оси x

plt.xlim(X_min, X_max)


🔗 Задаем диапазон по оси y от 0 до максимального значения y + отступ (margin)

plt.ylim(0, Y[:, 0].max() + margin)


⚙️ Теперь добавляем данные на график:

plt.scatter(X[:, 1], Y[:, 0], color='green', label='Исходные данные')


🔗 X[:, 1] — координаты по оси x (второй столбец x — это площади)

🔗 Y[:, 0] — координаты по оси y (цены домов)

plt.plot(X_support, Y_model, color='blue', label='Линейная регрессия')


🔗 X_support — координаты по оси x

🔗 Y_model — координаты по оси y (предсказание модели)

plt.xlabel('Площадь дома') # Подписываем оси
plt.ylabel('Цена дома') # Подписываем оси
plt.title('Линейная регрессия: Цена дома от площади') # Заголовок
plt.legend() # Добавляем легенду
plt.grid() # Сетка на графике


plt.show() # Вызываем наш график


П О Л Н Ы Й К О Д

import numpy as np
from numpy.linalg import inv
import matplotlib.pyplot as plt

# Данные
X = np.array([[1, 50], [1, 60], [1, 70], [1, 100]])
Y = np.array([[10], [30], [40], [50]])

# Матрица X_T_X и обратная матрица
X_T_X = (X.T).dot(X)
X_T_X_inverted = inv(X_T_X)

# Коэффициенты w
w = X_T_X_inverted.dot(X.T).dot(Y)
print('w_1=%.5f, w_2=%.3f' % (w[0][0], w[1][0]))

# Построение линейной модели
margin = 10
X_min = X[:, 1].min() - margin
X_max = X[:, 1].max() + margin

# Поддержка для прямой
X_support = np.linspace(X_min, X_max, num=100)
Y_model = w[0][0] + w[1][0] * X_support

# Настройка графика
plt.figure(figsize=(8, 6))
plt.xlim(X_min, X_max)
plt.ylim(0, Y[:, 0].max() + margin)

# Точки данных
plt.scatter(X[:, 1], Y[:, 0], color='red', label='Исходные данные')

# Прямая регрессии
plt.plot(X_support, Y_model, color='blue', label='Линейная регрессия')

# Добавление подписей
plt.xlabel('Площадь дома')
plt.ylabel('Цена дома')
plt.title('Линейная регрессия: Цена дома от площади')
plt.legend()
plt.grid()

plt.show()
❤‍🔥2🤓2👍1🤯1
Ну и сам результат
👍2🤓21🤯1
⚙️🧑‍💻Гайс, добрый вечер! Я рил скучал, но сессия...сами понимаете в общем. Пока у меня появилось время, надо жестко начинать писать. Сегодня продолжим изучать линейную регрессию. В прошлых постах мы уже неплохо так бустанулись, советую все это прошарить и изучить.

⚙️ Итак, импортируем библиотеку numpy

import numpy as np 
from numpy.linalg import inv # Имортируем функцию для нахождения обратной матрицы

X = np.array([[1, 50], [1, 60], [1, 70], [1, 100]]) # матрица (объекты - признаки)
Y = np.array([[10], [30], [40], [50]]) #Вектор


⚙️ Умножаем транспонированную матрицу (объекты - признаки) на саму себя, используем для этого функцию .dot (для умножения матриц и векторов). Заодно найдем и обратную матрицу и также умножим ее на матрицу X (объекты - признаки).

#(X.T).dot(X) - это просто для понимания, как мы умножили транспонированную мтарицу на саму себя же 

w = inv( # Обратную транспонированную матрицу умножим на X
(X.T).dot(X)
).dot( # Дальше умножим на транспонированную матрицу X.T
X.T
).dot( # И умножим на вектор Y
Y
)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1👍1🥰1🤯1
Метод наименьших квадратов (МНК) — математический метод, применяемый для решения различных задач, основанный на минимизации суммы квадратов отклонений некоторых функций от экспериментальных входных данных.


⁉️ Зачем это нужно знать? Именно этот метод мы используем когда пишем все эти непонятные формулы.

‼️⚙️ Сейчас очень внимательно: 🔗Здесь вы можете найти в комментах все нужные нам формулы (а точнее одну, остальные для понимания разбора), а сама формула если че вот — (Xᵀ * X)⁻ ¹ * Xᵀ * Y

🔗 А вот отсюда мы сейчас возьмем с вами несколько строчек и постараемся разобрать:

import numpy as np
from numpy.linalg import inv

# Матрица X и вектор Y
X = np.array([[1, 50], [1, 60], [1, 70], [1, 100]])
Y = np.array([[10], [30], [40], [50]])

# Вычисление X^T * X
X_T_X = (X.T).dot(X)

# Обратная матрица (X^T * X)^-1
X_T_X_inverted = inv(X_T_X)

# Вычисление w = (X^T * X)^-1 * X^T * Y
w = X_T_X_inverted.dot(X.T).dot(Y)

print('w_1=%.5f, w_2=%.3f' % (w[0][0], w[1][0]))


🔗 Начнем отвечать на вопросы по каждой строке:

⚙️0️⃣ Здесь особо ниче такого нет, импортируем библиотеки и создаем две матрицы. Хороший вопрос — зач нам единицы в первой матрице? Нам нужно учесть свободный коэффициент w₁ в уравнении y = w₁ + w₂ * x

import numpy as np
from numpy.linalg import inv

# Матрица X и вектор Y
X = np.array([[1, 50], [1, 60], [1, 70], [1, 100]]) # Второй столбец это площади наших хат
Y = np.array([[10], [30], [40], [50]])


1️⃣ Создаем переменную, которая будет хранить результат вычислений нашей транспонированной матрицы на нее же.

X_T_X = (X.T).dot(X)


2️⃣ Вычислим обратную матрицу (Скоро объясню зачем все это)

X_T_X_inverted = inv(X_T_X)


3️⃣ Ну и последним моментов вычислим уже наши коэффициенты для этой формулы y = w₁ + w₂ * x

w = X_T_X_inverted.dot(X.T).dot(Y)


‼️ Кароч гайс, мы по сути просто соединили все в одну формулу и по этой формуле можно уже предсказывать наши будущие значения.

4️⃣ Под конец можно бахнуть вывод, ну а хули

print('w_1=%.5f, w_2=%.3f' % (w[0][0], w[1][0]))


⚙️ Че это за знаки в начале?

w₁ — вывод с точностью до 5 знаков

w₂ — вывод с точностью до 3 знаков

5️⃣ Ну и сам вывод:

w_1=-17.50000, w_2=0.714
❤‍🔥11👍1
Привет подписичники, сегодня ожидайте пост 🙏
❤‍🔥4
🧑‍💻 Итак, продвигаемся в изучении линейной регрессии. Я нашел сегодня вот такой код:

🔗0️⃣
from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
reg.coef_


Вывод если что будет такой:

array([0.5, 0.5])


Это такая же линейная регрессия, что мы делали и раньше, но, что изменилось?

⚙️1️⃣ Во первых, добавили библиотеку 🟰sklearn🟰. Из нее мы импортируем модуль 🟰linear_model🟰

2️⃣ Создаем саму модель линейной регрессии:

reg = linear_model.LinearRegression() #Создаем объект класса LinearRegression


3️⃣ Дальше нам надо ее как то обучить:

reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2]) #fit - метод для обучения модели на данных, сначала идут признаки X, затем [0, 1, 2], это значения, которые наша модель и должна предсказать 


4️⃣ Остается получить коэффициенты:

reg.coef_


5️⃣ Результат:

array([0.5, 0.5])
🥰2👍1🤯1
⚙️ Ну вот и подкралась 3 часть навигации по Машинному обучению, пользуйтесь на здоровье:

0⃣ ARRAYS 1 (начинаем работать с NumPy)

1⃣ ARRAYS 2 (разбираемся с массивами)

2⃣ ARRAYS 3 (linspace и arange)

3⃣ ARRAYS 4 (дробные числа)

4⃣ ARRAYS 5 (диапазоны) 🔗 Продолжение

5⃣ MATPLOTLIB

6⃣ График 1 🔗 График 2 🔗 График 3 🔗 График 4 🔗 График 5

7⃣ Математика (Векторы)

8⃣ Что такое норма? (Разбираем максимальную норму)

0⃣ Евклидова норма

🔟 Манхэттенская норма

1⃣1⃣ Frobenius-норма

1⃣2⃣ Скалярное произведение векторов

1⃣3⃣ Векторное произведение

1⃣4⃣ Строим график синусоиды 🔗 Разбираем параметры строки в коде 🔗 Продолжение 🔗 Весь код

1⃣5⃣ НАЧИНАЕМ РАЗБИРАТЬ ЛИНЕЙНУЮ РЕГРЕССИЮ

1⃣6⃣ Выводим матрицу X 🔗 Выводим матрицу для Y

1⃣7⃣ Реализация формулы (Очень важно!!!) 🔗 Примеры использования наших функций 🔗 Дописываем формулу до конца 🔗 Разбираем вывод

1⃣8⃣ Разбираем код с линейной регрессией (формулу пишем сами) 🔗 Разбираем последнюю строку 🔗 Разбираем следующий блок кода 🔗 Точки для нашей линии, визуал и ПОЛНЫЙ КОД 🔗 Результат

1⃣0⃣ Продолжаем разбирать линейную регрессию

2⃣0⃣ Продолжаем разбирать линейную регрессию (вновь формулы)

2⃣1⃣ Разбор нового кода (формулы начинают уходить, оптимизируем процесс)

2⃣2⃣ Применяем линейную регрессию на датасете (fetch_california_housing)

2⃣3⃣ Оцениваем видосик

2⃣4⃣ Разбираем дальше датасет про хаты из Калифорнии 🔗 Продолжение 🔗 Продолжение

2⃣5⃣ Разбираем функцию 🔗 Продолжение 🔗 Весь код

2⃣6⃣ Разбор дз с курса (визуал точек) 🔗 Начинаем разбирать 🔗 Продолжение 🔗 Продолжение 🔗Результат

2⃣7⃣ Метрики качества (очень важная тема) 🔗 Продолжение 🔗 Продолжение

2⃣7⃣ RMSE

2⃣8⃣ Сами пишем задание для метрик🔗 Строим график 🔗 Дополняем код

2⃣0⃣ Следующая метрика R²

3⃣0⃣ Трансформация данных

3⃣1⃣ Масштабирование данных

3⃣2⃣ Показываю на деле как это работает и зачем это надо

3⃣3⃣ Дополняем линейную регрессию преобразованием данных

3⃣4⃣ Рассматриваем sqrt преобразование 🔗 Продолжение (поясняем моменты из прошлых постов)

3⃣5⃣ Разбираем большой код

3⃣6⃣ Min-Max Scalling 🔗 Продолжаем 🔗 Полный код за последние уроки 🔗 Результаты

3⃣7⃣ Последний пост по Z-Core стандартизации 🔗 Формула Z - core 🔗 Дальше продолжаем Z-Core 🔗 САМОЕ ВАЖНОЕ

3⃣8⃣ Разъясняю за наклон и перемещение (w и b) для исходных данных и для стандартизированных данных 🔗 Добавим 2 гистограммы (поясняем за Z-core) 🔗 Ну точно последний пост по Z-core (ОЧЕНЬ ВАЖНО)

3⃣0⃣ Среднее значение ( (μ))
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1111
🧑‍💻 Всем ку, сегодня будет классный мощнейший пост, всех с наступающим !
👎3👀2
🧑‍💻 Гайсы привет, совсем скоро Новый год, но че бы проводить старый изучением линейной регрессии ⁉️ Я даже подготовил вам картиночку соответствующую, надеюсь, вы зацените!

⚙️ Итак, что мы сегодня будем делать ⁉️ Мы будем обучать линейную регрессию на дате сете с ценами на дома в Калифорнии. Дата сет стандартный, поэтому включен в исходный код библиотеки Sklearn

0️⃣ Для начала напишем функцию, она нужна для удобного вывода нашего списка, чуть дальше мы ее разберем:

def ndprint(a, format_string = '{0:.2f'):
''' Функция для вывода наших списков'''
return [format_string.format(v,i) for i, v in enumerate(a)]


1️⃣🔗 Теперь нам надо как-то вывести данные датасета:

from sklearn.datasets import fetch_california_housing

# Загружаем наш датасет
california_dataset = fetch_california_housing()

# Здесь мы извлечем данные (признаки или фичи)
features = california_dataset.data

print(features)


⚙️ А вывод будет таким:

{'data': array([[   8.3252    ,   41.        ,    6.98412698, ...,    2.55555556,
37.88 , -122.23 ],
[ 8.3014 , 21. , 6.23813708, ..., 2.10984183,
37.86 , -122.22 ],
[ 7.2574 , 52. , 8.28813559, ..., 2.80225989,
37.85 , -122.24 ],
...,
[ 1.7 , 17. , 5.20554273, ..., 2.3256351 ,
39.43 , -121.22 ],
[ 1.8672 , 18. , 5.32951289, ..., 2.12320917,
39.43 , -121.32 ],
[ 2.3886 , 16. , 5.25471698, ..., 2.61698113,
39.37 , -121.24 ]]), 'target': array([4.526, 3.585, 3.521, ..., 0.923, 0.847, 0.894]


🔗 Но, но, еще один момент, мы можем вывести форму этого массива:

from sklearn.datasets import fetch_california_housing

# Загружаем датасет
california_dataset = fetch_california_housing()

# Извлекаем данные (признаки)
features = california_dataset.data

print(features.shape) # Проверка размера данных


🔗 И вот такой будет вывод:

(20640, 8)
❤‍🔥4👀1
⚙️
❤‍🔥5
Друзья, гайс, искренне спасибо, что следите за этим каналом, в Новом году мы будем развиваться еще больше ❤️
❤‍🔥7👍3
С Новым годом братцы ❤️
❤‍🔥10
Media is too big
VIEW IN TELEGRAM
Возвращаемся с новыми силами
❤‍🔥32👍2🤯1👨‍💻1
Друзья, привет! Пора за работу. Мы в прошлом году закончили вот тут и сегодня мы все эти знания возобновим и углубимся еще сильнее.

0️⃣⚙️ Напомню, что мы работали с датасетом о домах в Калифорнии (там у нас находились фичи или features это признаки (в роли признаков могут выступать параметры которые влияют на цену нашей хаты в Калифорнии, будь то число комнат, возраст дома, плотность населения, расстояние до океана и всякое всякое) и целевые значения — y (это то. что нам и нужно предсказать)

🔗 К слову, вот что мы имеем, загружая датасет:

(MedInc: Средний доход в районе.
HouseAge: Средний возраст домов в районе
AveRooms: Среднее количество комнат на дом.
AveBedrms: Среднее количество спален на дом.
Population: Население района
AveOccup: Среднее количество жителей на дом
Latitude: Географическая широта.
Longitude: Географическая долгота


from sklearn.datasets import fetch_california_housing 
from numpy.linalg import inv # Импортируем функцию inv для обратной матрицы
❤‍🔥21
1️⃣🔗 Теперь, что касаемо загрузки датасета, california_dataset — это объект типа Bunch (мы такое с вами не проходили:

Это объект, похожий на словарь, но с доступом к элементам в стиле атрибутов вместо пар ключ-значение. Объекты типа bunch используются для загрузки данных в библиотеке Scikit-Learn. Они представляют собой аналог словаря, но с возможностью динамического добавления и удаления атрибутов.


california_dataset = fetch_california_housing()


🔗 Что касаемо дополнительных атрибутов:

🟰.data — массив с признаками (многомерный массив, где каждая строка соответствует одному району, а каждый столбец — одному признаку).

🟰.target — целевая переменная (стоимость домов).

🟰.feature_names — список названий признаков.

🟰.DESCR — описание набора данных.


2️⃣ Извлекаем признаки:

🔗 Тут мы извлекаем матрицу признаков из объекта 🟰california_dataset🟰 и сохраняем её в нашу переменную.

features = california_dataset.data


🔗 Что представляет из себя 🟰features🟰? Это двумерный массив или матрица, состоящий из 20640 домов и 8 фичей. Откуда мы взяли эти значения? Вот вам код ниже для собственной проверки:

from sklearn.datasets import fetch_california_housing

# Загружаем датасет
california_dataset = fetch_california_housing()

# Извлекаем данные (признаки)
features = california_dataset.data

print(features.shape)

#Вывод:
#(20640, 8)


20640 домов и 8 фичей — это по сути размер нашего массива, его форма, для этого нужен атрибут 🟰.shape🟰

🔗 Вот вам еще один пример использования матрицы 🟰features🟰 (извлекаем признаки)

from sklearn.datasets import fetch_california_housing
from numpy.linalg import inv

california_dataset = fetch_california_housing()

features = california_dataset.data
y = california_dataset.target

print(features[:2])

#Вывод:
'''
[[ 8.32520000e+00 4.10000000e+01 6.98412698e+00 1.02380952e+00
3.22000000e+02 2.55555556e+00 3.78800000e+01 -1.22230000e+02]
[ 8.30140000e+00 2.10000000e+01 6.23813708e+00 9.71880492e-01
2.40100000e+03 2.10984183e+00 3.78600000e+01 -1.22220000e+02]]
'''
4🥰1🤓1👨‍💻1
🧑‍💻 Гайс, добрый вечерочек всем, продолжаем жестко воркать! Мы остановились тут — в конце извлекли признаки из нашего датасета. Теперь извлекаем целевую переменную (у нас это 🟰y🟰 — то, что мы и хотим предсказать).

y = california_dataset.target


Так, че мы тут делаем? Мы извлекаем вектор целевых переменных (опять же, это те переменные, которые мы хотим предсказать) из объекта 🟰california_dataset🟰.

🔗 y — это одномерный массив размерностью (20640, ), где каждое значение — это средняя стоимость домов в данном районе, округленная до тысяч долларов. Чтобы самому это вывести, вот вам код:

y = california_dataset.target

y.shape

'''
Вывод: (20640,)

'''


🔗 Если вы хотите попробовать вывести первые два значения. вот еще пример:

y = california_dataset.target

print(y[:2])

'''
Вывод: array([4.526, 3.585]) (Это значит, что в первом районе средняя стоимость домов примерно $4526, а во втором районе — $3585

'''


🔗 ЗАЧЕМ МЫ ИЗВЛЕКАЕМ 🟰features🟰 И 🟰y🟰?

⚙️ features (признаки) — это наши независимые переменные, которые используются для обучения модели

⚙️ y (целевая переменная) — это то, что мы хотим предсказать, используя признаки


🔗 Хотелось бы еще добавить про 🟰shape🟰. Он возвращает кортеж, содержащий размеры массива (количество строк и столбцов). Вот пример:

import numpy as np

array = np.array([[1, 2, 3], [4, 5, 6]])

print(array.shape)

'''
Вывол: (2,3) -- 2 строки и 3 столбца

'''
🥰21
🧑‍💻 Так, хорошо, мы разобрались чут чут, разбираемся дальше...

🔗 В этом посте мы рассматривали такую функцию:

def ndprint(a, format_string = '{0:.2f'):
''' Функция для вывода наших списков'''
return [format_string.format(v,i) for i, v in enumerate(a)]

print('Аналитически определенные коэффициенты \n%s' % ndprint(w))


🔗 Так, че она делает? Ща разберем:

⚙️ ndprint — это пользовательская функция для форматирования списка чисел (у нас это коэффициенты модели)

⚙️ a — это массив или список чисел, например, веса w₁ и w₂

⚙️ format_string = '{0:.2f}' — строка формата, которая задаёт, как отобразить числа ( {0} — первое значение (число из массива), :.2f — округление числа до двух знаков после запятой (например, 0.514 станет 0.51))

⚙️ for i, v in enumerate(a) — enumerate(a) перебирает v (текущее число), i — индекс числа
👍2❤‍🔥1🤯1
def ndprint(a, format_string = '{0:.2f'):
''' Функция для вывода наших списков'''
return [format_string.format(v,i) for i, v in enumerate(a)]

print('Аналитически определенные коэффициенты \n%s' % ndprint(w))


🔗 Кароч, последняя строка выводит что-то такое: ['0.51', '0.02', '-0.18', '0.87', '0.00', '-0.00', '-0.06', '-0.02']

🔗 Таак, для начала, берем вот эту формулу 🟰 y = w₁ * x + w₀ * 1 = w₁ * x₁ + w₀ * x₀ 🟰 вот отсюда.

‼️ Повторюсь, но лишним не будет, Y — это целевое значение (то, что мы ищем, у нас это средняя стоимость хаты), наши иксы (x) — это входные признаки (число комнат), w₀ — это смещение (фиксированный базовый уровень предсказания), w₁ w₂ и другие 'вешки' — это коэффициенты весов для каждого признака (то, что мы и выводим).


ЧТО ЗНАЧАТ ЭТИ КОЭФФИЦИЕНТЫ?

‼️ Допустим, есть у нас 2 признака (то бишь иксы): X — средний доход жителей района, X₂ — число комнат в доме, модель наша вычисляет такие коэффициенты — w₁ = 0.51 w₂ = 0.02

Наша модельная формула будет иметь вид: Y = 0.51 * X + 0.02 * X₂

⚙️ w₁ = 0.51 — если доход жителей района увеличится на единицу, средняя стоимость дома Y увеличится на 0.51

⚙️ w₂ = 0.02 — если число комнат увеличится на единицу, стоимость дома Y увеличится на
0.02

Влияние первого признака (дохода) на стоимость дома намного сильнее, чем влияние второго признака (числа комнат)

1️⃣ Чем больше абсолютное значение коэффициента w, тем больше влияние этого признака на предсказание


2️⃣ Если w = 0, это значит, что признак никак не влияет на 𝑌
❤‍🔥31👍1
🧑‍💻 Выкладываю весь код гайс 🔽🔽🔽

def ndprint(a, format_string = '{0:.2f}'):
''' Функция для вывода наших списков'''
return [format_string.format(v,i) for i, v in enumerate(a)]

from sklearn.datasets import fetch_california_housing
from numpy.linalg import inv
import numpy as np

california_dataset = fetch_california_housing()

features = california_dataset.data

y = california_dataset.target

w = inv(
(features.T).dot(features)
).dot(
features.T
).dot(
y
)

print('Аналитически определенные коэффициенты \n%s' % ndprint(w))


⚙️ Вывод:

Аналитически определенные коэффициенты 
['0.51', '0.02', '-0.18', '0.87', '0.00', '-0.00', '-0.06', '-0.02']
❤‍🔥3👍1🤯1🤓1