Машинное обучение (ML) — захватывающая и быстро развивающаяся область, которая включает в себя создание систем, которые могут автоматически обучаться на основе данных. Если вы, как и я, недавно начали изучать машинное обучение, возможно, вы столкнулись с множеством запутанных терминов и математических понятий. Но не волнуйтесь, при правильном подходе и некоторой настойчивости любой может освоить основы машинного обучения и начать создавать свои собственные модели.
Я изучаю машинное обучение с начала 2021 года и, как и любой другой любопытный студент, начал понимать основы ИИ. Я начал изучать ключевые концепции машинного обучения еще на первом курсе. Я предполагаю, что вы знакомы с Python и некоторыми распространенными библиотеками, такими как Pandas и т. д. Если нет, вы можете начать с понимания этого и вернуться к этой статье позже! В любом случае, оптимальный способ изучить ML — начать искать ответы на следующие вопросы:
- Что такое ИИ?
- Что такое простой ИИ и сложный ИИ?
- Что включает в себя ИИ?
- Что такое ML и DL?
- Какие математические концепции необходимы для машинного обучения?
- Типы моделей машинного обучения? [Понимать все основные модели машинного обучения с учителем и без учителя]
- Что такое функции смещения, дисперсии, потерь в ML?
- Что такое нейронные сети?
- Что такое деревья решений и ансамбли деревьев?
- Типы слоев в нейронных сетях? [В основном, другой тип нейронных сетей]
- Что такое TensorFlow и PyTorch?
Ответив на эти вопросы, вы получите прочный фундамент знаний, на который можно опереться. Изучив основы машинного обучения, вы можете начать практиковаться, создавая свои собственные модели. Однако важно практиковаться, пока вы полностью не поймете назначение каждой модели машинного обучения и варианты ее использования.
Как начать практиковать модели машинного обучения?
Одним из замечательных ресурсов является Kaggle, платформа, похожая на GitHub, которая ориентирована исключительно на машинное обучение и науку о данных. На Kaggle вы можете найти бесплатные модели машинного обучения, наборы данных, персонализированные алгоритмы и многое другое. Начните с загрузки наборов данных для различных алгоритмов машинного обучения, чтобы начать практиковаться. К этому моменту у вас должно быть базовое представление о NumPy, Pandas и хотя бы одной из двух библиотек TensorFlow или PyTorch. Чтобы получить больше информации и получить практический опыт, я рекомендую изучить библиотеку Sci-Kit для Python, еще одну полезную библиотеку машинного обучения.
Изучая машинное обучение, вы, возможно, заметили, что во многом это связано с математикой. На самом деле, большая часть ИИ, машинного обучения и науки о данных — это просто математические выражения. Поэтому крайне важно понимать математику каждого алгоритма и каждого уровня активации в вашей нейронной сети. Чтобы по-настоящему освоить каждый алгоритм машинного обучения, я придумал решение, которое сработало для меня.
Вы начинаете с того, что берете алгоритм, с которого хотите начать, и загружаете для него набор данных среднего размера. Теперь вы начинаете с написания Модели в NumPy (Да, вы правильно прочитали), теперь пишете ту же модель Sci-Kit Library, делаете то же самое, написав ту же модель в TensorFlow и PyTorch. Используйте один и тот же набор данных для всего этого. Написание модели ML в каждой из этих библиотек имеет большее значение, написание модели ML в NumPy позволяет вам действительно понять математику, лежащую в основе этой модели. легкие модели TensorFlow в пределах 100–200 строк кода, идите домой, вернитесь на следующий день и повторите! Написание в Sci-kit больше похоже на дополнительное обучение для вас, которое по-прежнему актуально и действительно полезно.
Чтобы сделать это более конкретным, позвольте мне продемонстрировать модель машинного обучения.
Написание модели линейной регрессии для прогнозирования цен на жилье с использованием NumPy
import numpy as np import pandas as pd data = pd.DataFrame({ 'Size': [1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700], 'Bedrooms': [3, 3, 2, 4, 2, 3, 4, 4, 3, 3], 'Price': [245000, 312000, 279000, 308000, 199000, 219000, 405000, 324000, 319000, 255000] }) X = data[['Size', 'Bedrooms']].values Y = data['Price'].values.reshape(-1, 1) X = np.hstack((np.ones((len(X), 1)), X)) def linear_regression(X, Y): beta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Y) return beta beta = linear_regression(X, Y) print(beta) new_data = pd.DataFrame({ 'Size': [1800, 2000], 'Bedrooms': [3, 4] }) new_X = new_data[['Size', 'Bedrooms']].values new_X = np.hstack((np.ones((len(new_X), 1)), new_X)) new_Y = new_X.dot(beta) print(new_Y)
Написание той же модели с помощью Sci-kit Learn
import numpy as np import pandas as pd from sklearn.linear_model import LinearRegression data = pd.DataFrame({ 'Size': [1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700], 'Bedrooms': [3, 3, 2, 4, 2, 3, 4, 4, 3, 3], 'Price': [245000, 312000, 279000, 308000, 199000, 219000, 405000, 324000, 319000, 255000] }) X = data[['Size', 'Bedrooms']] Y = data['Price'] model = LinearRegression() model.fit(X, Y) new_data = pd.DataFrame({ 'Size': [1800, 2000], 'Bedrooms': [3, 4] }) new_Y = model.predict(new_data) print(new_Y) print(model.intercept_) print(model.coef_)
Написание той же модели с помощью TensorFlow
import numpy as np import pandas as pd import tensorflow as tf data = pd.DataFrame({ 'Size': [1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700], 'Bedrooms': [3, 3, 2, 4, 2, 3, 4, 4, 3, 3], 'Price': [245000, 312000, 279000, 308000, 199000, 219000, 405000, 324000, 319000, 255000] }) X = data[['Size', 'Bedrooms']].values Y = data['Price'].values.reshape(-1, 1) # Initialize variables with random values W = tf.Variable(tf.random.normal([2, 1]), name='weights') b = tf.Variable(tf.random.normal([1]), name='bias') # Define placeholders for input and output X_placeholder = tf.placeholder(tf.float32, [None, 2], name='X') Y_placeholder = tf.placeholder(tf.float32, [None, 1], name='Y') # Define linear regression model linear_regression = tf.matmul(X_placeholder, W) + b # Define loss function (mean squared error) loss = tf.reduce_mean(tf.square(linear_regression - Y_placeholder)) # Define optimizer (gradient descent) optimizer = tf.train.GradientDescentOptimizer(0.0001).minimize(loss) # Initialize TensorFlow session sess = tf.Session() # Initialize variables sess.run(tf.global_variables_initializer()) # Train model for i in range(10000): _, loss_value = sess.run([optimizer, loss], feed_dict={X_placeholder: X, Y_placeholder: Y}) if i % 1000 == 0: print("Loss at step {}: {}".format(i, loss_value)) # Get final parameter values W_value, b_value = sess.run([W, b]) print("Parameter values:") print("W: {}".format(W_value)) print("b: {}".format(b_value)) # Use model to predict new house prices new_data = pd.DataFrame({ 'Size': [1800, 2000], 'Bedrooms': [3, 4] }) new_X = new_data[['Size', 'Bedrooms']].values new_Y = np.matmul(new_X, W_value) + b_value print("Predict")
Написание той же модели с помощью PyTorch
import numpy as np import pandas as pd import torch import torch.nn as nn import torch.optim as optim data = pd.DataFrame({ 'Size': [1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700], 'Bedrooms': [3, 3, 2, 4, 2, 3, 4, 4, 3, 3], 'Price': [245000, 312000, 279000, 308000, 199000, 219000, 405000, 324000, 319000, 255000] }) X = data[['Size', 'Bedrooms']].values.astype(np.float32) Y = data['Price'].values.reshape(-1, 1).astype(np.float32) class LinearRegression(nn.Module): def __init__(self): super(LinearRegression, self).__init__() self.linear = nn.Linear(2, 1) def forward(self, x): out = self.linear(x) return out model = LinearRegression() # Define loss function (mean squared error) criterion = nn.MSELoss() # Define optimizer (gradient descent) optimizer = optim.SGD(model.parameters(), lr=0.0001) # Train model num_epochs = 10000 for epoch in range(num_epochs): # Convert inputs and outputs to PyTorch tensors inputs = torch.from_numpy(X) targets = torch.from_numpy(Y) # Clear the gradients optimizer.zero_grad() # Forward pass outputs = model(inputs) # Calculate loss loss = criterion(outputs, targets) # Backward pass and optimize loss.backward() optimizer.step() if epoch % 1000 == 0: print("Epoch [{}/{}], Loss: {:.4f}".format(epoch+1, num_epochs, loss.item())) # Get final parameter values with torch.no_grad(): W_value = model.linear.weight.numpy() b_value = model.linear.bias.numpy() print("Parameter values:") print("W: {}".format(W_value)) print("b: {}".format(b_value)) # Use model to predict new house prices new_data = pd.DataFrame({ 'Size': [1800, 2000], 'Bedrooms': [3, 4] }) new_X = new_data[['Size', 'Bedrooms']].values.astype(np.float32) new_X_tensor = torch.from_numpy(new_X) new_Y_tensor = model(new_X_tensor) new_Y = new_Y_tensor.detach().numpy() print("Predicted prices:") print(new_Y.flatten())
Таким образом, вам может потребоваться 2 или 3 дня, чтобы попрактиковаться в каждом алгоритме, но, в конце концов, это того стоит, потому что теперь вы достаточно гибки, чтобы кодировать любую модель в любой библиотеке, этот метод также дает вам достаточно понимания, что вы можете придумать свой собственный алгоритм, который может быть гораздо более оптимизированным, чем существующие. Практика таким образом займет у вас 75-90 дней, и вы сможете освоить все модели машинного обучения, как с учителем, так и без него.
Заключение
ИИ и машинное обучение, безусловно, сложны, но как только вы станете всезнайкой, это станет очень интересно. Помните, что эту стратегию можно использовать везде, если вы хотите освоить глубокое обучение, попробуйте написать свои модели в TensorFlow, а также в PyTorch, и все готово.