Практические примеры реализации ИИ на Python
Основные примеры реализации искусственного интеллекта на Python
Как классифицировать ирисы с помощью логистической регрессии?
Логистическая регрессия – простой и эффективный алгоритм для задач многоклассовой классификации. Набор данных Iris содержит 150 образцов с 4 признаками и 3 классами. Реализация занимает несколько строк.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
data = load_iris()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f'Accuracy: {accuracy_score(y_test, y_pred):.2f}')
ии для написания кодов python (ии для написания кодов python)
Accuracy: 1.00
сгенерировать код python (генерация кода python)
Пояснение шагов: данные загружаются, делятся на обучающую и тестовую выборки, модель обучается, затем предсказывает классы. Метрика accuracy показывает долю правильных ответов.
Типичные проблемы: мультиколлинеарность признаков – решается регуляризацией (параметр penalty); необходимость масштабирования – используйте StandardScaler. При малом количестве итераций (max_iter) может не сойтись – увеличьте до 200-500.
Цели использования: знакомство с классификацией, быстрый бейзлайн для многоклассовых задач.
Как предсказать стоимость жилья с помощью линейной регрессии?
Линейная регрессия применяется для прогнозирования непрерывных значений. Набор California Housing содержит 8 признаков, цель – медианная стоимость дома.
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
data = fetch_california_housing()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f'MSE: {mse:.2f}')
основы искусственного интеллекта в примерах на python (основы искусственного интеллекта на python с примерами)
MSE: 0.56
Python искусственный интеллект примеры (примеры искусственного интеллекта на python)
Описание шагов: загрузка данных, разделение, обучение модели линейной регрессии, оценка через среднеквадратичную ошибку.
Проблемы: линейная регрессия чувствительна к выбросам – удалите их или используйте RobustScaler. Нормальное распределение остатков – проверяйте после обучения. Если MSE велика, попробуйте добавить полиномиальные признаки.
Цели: прогнозирование числовых величин, базовый регрессионный анализ.
Как разделить данные на кластеры без учителя с помощью KMeans?
Метод K-средних группирует объекты по близости признаков. Количество кластеров выбирается заранее.
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
X, _ = make_blobs(n_samples=300, centers=4, random_state=42)
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.title('KMeans clustering')
plt.savefig('clusters.png')
Ai python codes (коды для искусственного интеллекта на python)
График с точками, окрашенными по кластерам.
Загружаются синтетические данные, модель находит 4 центра, каждому объекту присваивается метка кластера. Визуализация помогает интерпретировать результат.
Ошибки: неправильный выбор числа кластеров – используйте метод локтя или силуэтный анализ. Инициализация центров может влиять – укажите random_state для воспроизводимости. Данные должны быть масштабированы.
Цели: сегментация клиентов, сжатие данных, поиск скрытых групп.
Как распознавать рукописные цифры с помощью нейронной сети на Keras?
Набор MNIST содержит 60 000 изображений цифр 0-9 размером 28x28. Простая полносвязная сеть достигает точности около 98%.
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.utils import to_categorical
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
model = Sequential([
Flatten(input_shape=(28, 28)),
Dense(128, activation='relu'),
Dense(64, activation='relu'),
Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=5, batch_size=32, validation_split=0.2)
loss, acc = model.evaluate(X_test, y_test)
print(f'Test accuracy: {acc:.4f}')
Test accuracy: 0.9768
Пояснение: изображения нормализуются, метки преобразуются в one-hot, строится сеть с двумя скрытыми слоями, обучение 5 эпох.
Типичные ошибки: переобучение – добавьте Dropout или увеличьте данные. Долгое обучение – используйте более мощные GPU или меньше эпох. Неправильная нормализация – обязательно делите на 255.
Цели: знакомство с нейронными сетями, задача компьютерного зрения.
Как определить тональность текста с помощью TF-IDF и логистической регрессии?
Метод TF-IDF преобразует тексты в числовые векторы, учитывая важность слов. Логистическая регрессия классифицирует тональность.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_20newsgroups
categories = ['sci.space', 'soc.religion.christian']
data = fetch_20newsgroups(subset='all', categories=categories)
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
vectorizer = TfidfVectorizer(stop_words='english', max_features=1000)
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)
model = LogisticRegression()
model.fit(X_train_vec, y_train)
acc = model.score(X_test_vec, y_test)
print(f'Accuracy: {acc:.2f}')
Accuracy: 0.96
Описание: из датасета выбираются две категории, текст векторизуется с ограничением 1000 признаков, модель обучается.
Проблемы: разреженность данных – используйте разреженные матрицы (scipy.sparse). Неправильная очистка текста – удалите пунктуацию и стоп-слова. Если точность низкая, увеличьте max_features или используйте n-граммы.
Цели: классификация текстов, анализ тональности, фильтрация спама.
Как обнаружить лица на изображении с помощью каскадов Хаара OpenCV?
Каскадный классификатор обучен на тысячах лиц и работает в реальном времени.
import cv2
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
img = cv2.imread('photo.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imwrite('faces_detected.jpg', img)
print(f'Found {len(faces)} face(s)')
Found 2 face(s)
Инструкция: загружается классификатор, изображение переводится в оттенки серого, метод detectMultiScale возвращает координаты лиц.
Ошибки: ложные срабатывания – увеличьте minNeighbors или minSize. Загруженное изображение должно быть в папке проекта. Качество детекции падает при поворотах – используйте дополнительные каскады или глубокое обучение.
Цели: детекция объектов, системы видеонаблюдения, обработка фотографий.
Расширенные примеры искусственного интеллекта на Python
Случайный лес для классификации ирисов (сравнение с логистической регрессией)
Случайный лес состоит из множества деревьев решений, устойчив к переобучению и хорошо работает с нелинейными зависимостями.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
print(f'Random Forest accuracy: {accuracy_score(y_test, y_pred):.2f}')
print('Feature importances:', rf.feature_importances_)
Random Forest accuracy: 1.00 Feature importances: [0.10 0.04 0.42 0.44]
Модель показала 100% точность на данном разбиении, дополнительно выводится важность признаков – можно понять, какие признаки наиболее значимы.
Сверточная нейронная сеть для классификации изображений CIFAR-10
CIFAR-10 содержит 60 000 цветных изображений 32x32 из 10 классов. Сверточные слои извлекают пространственные признаки.
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.utils import to_categorical
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)),
MaxPooling2D((2,2)),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D((2,2)),
Flatten(),
Dense(128, activation='relu'),
Dropout(0.5),
Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=64, validation_split=0.1)
loss, acc = model.evaluate(X_test, y_test)
print(f'Test accuracy: {acc:.4f}')
Epoch 10/10 703/703 [==============================] - 12s 17ms/step - loss: 0.8276 - accuracy: 0.7072 - val_loss: 0.7907 - val_accuracy: 0.7247 Test accuracy: 0.7163
Сеть из двух сверточных слоев и полносвязного слоя с Dropout дает около 72% точности. Для улучшения можно добавить аугментацию данных и увеличить глубину сети.
LSTM для прогнозирования временного ряда (синусоида)
Рекуррентные сети LSTM подходят для последовательностей. Пример: предсказать следующую точку синусоиды по предыдущим 50.
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
# генерация данных
x = np.linspace(0, 100, 1000)
y = np.sin(x)
seq_length = 50
X, Y = [], []
for i in range(len(y)-seq_length):
X.append(y[i:i+seq_length])
Y.append(y[i+seq_length])
X = np.array(X).reshape(-1, seq_length, 1)
Y = np.array(Y)
# разделение
split = int(len(X)*0.8)
X_train, X_test = X[:split], X[split:]
y_train, y_test = Y[:split], Y[split:]
model = Sequential([
LSTM(50, activation='relu', input_shape=(seq_length, 1)),
Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=20, batch_size=32, validation_data=(X_test, y_test), verbose=0)
loss = model.evaluate(X_test, y_test)
print(f'Test MSE: {loss:.6f}')
Test MSE: 0.000218
Модель научилась предсказывать синусоиду с очень малой ошибкой. LSTM эффективны для задач с долгосрочными зависимостями.
Трансферное обучение с предобученной VGG16 для классификации кошек и собак
Использование предобученной на ImageNet модели VGG16, замена верхних слоев под новую задачу, экономит время и данные.
from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Model
from tensorflow.keras.layers import GlobalAveragePooling2D, Dense
from tensorflow.keras.preprocessing.image import ImageDataGenerator
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224,224,3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(128, activation='relu')(x)
predictions = Dense(1, activation='sigmoid')(x)
model = Model(inputs=base_model.input, outputs=predictions)
# заморозка базовых слоев
for layer in base_model.layers:
layer.trainable = False
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# генератор данных (структура папок train/cats, train/dogs)
datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2)
train_gen = datagen.flow_from_directory('train', target_size=(224,224), batch_size=32, class_mode='binary', subset='training')
val_gen = datagen.flow_from_directory('train', target_size=(224,224), batch_size=32, class_mode='binary', subset='validation')
model.fit(train_gen, epochs=5, validation_data=val_gen)
print('Transfer learning completed.')
Found 2000 images belonging to 2 classes. Found 500 images belonging to 2 classes. Epoch 5/5 ... accuracy: 0.98 - val_accuracy: 0.97
После трансферного обучения точность достигает 97% без необходимости обучать всю сеть с нуля. Рекомендуется разморозить несколько верхних слоев для тонкой настройки.
Использование предобученной модели BERT для анализа тональности (Hugging Face)
Современные трансформеры, такие как BERT, дают высокое качество в NLP. Библиотека transformers упрощает загрузку и тонкую настройку.
from transformers import pipeline
classifier = pipeline('sentiment-analysis', model='distilbert-base-uncased-finetuned-sst-2-english')
results = classifier([
'I love this product!',
'This is terrible.'
])
for r in results:
print(r)
{'label': 'POSITIVE', 'score': 0.9998}
{'label': 'NEGATIVE', 'score': 0.9996}
Использование готового пайплайна – самый быстрый способ получить качественный анализ тональности. Возможна тонкая настройка на собственных данных.