Практические примеры реализации ИИ на 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}

Использование готового пайплайна – самый быстрый способ получить качественный анализ тональности. Возможна тонкая настройка на собственных данных.

Примеры искусственного интеллекта на Python - comments

En
Python искусственный интеллект примеры (python)