С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 12.02.2023
Сообщений: 10

Python jupyter notebook. Работа по дисциплине Искусственный Интеллект, тема обучения с учителем, проблема в коде

28.11.2024, 16:08. Показов 997. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте, пользователи данного форума, я студент осваивающий дисциплину Искусственный Интеллект, возникла проблема при выполнении работы на тему обучения с учителем, которую сам я решить не в силах. Прошу помочь мне ее исправить. В самой работе используется ИИ для прогнозирования результата.
Задача была поставлена следующим образом: Используя методы классификации, создать модель для классификации объектов датасета по указанному в варианте полю. Достаточно использовать один любой метод классификации (логистическая регрессия, метод опорных векторов, ансамблевая модель). Результаты прогнозирования должны быть отображены на матрице несоответствий и в виде таблицы.
Из исходных данных у меня является датасет с моим вариантом, в котором описаны данные и параметры машинных двигателей и образец работы, по которому я смогу сориентироваться.
Прилагаю свой код работы:
1)Загрузка библиотек и датасета
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[CODE]
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge
from sklearn.linear_model import ElasticNet
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_validate
from sklearn import metrics
from sklearn.metrics import confusion_matrix
import seaborn as sns
%matplotlib inline
df = pd.read_csv('23 FuelConsumption.csv')
df.info ()
[/CODE]
2)Обработка датасета по требованиям варианта
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[CODE]
df=df.drop(['Year'], axis=1)#удаляем поле из-за требований варианта
df=df.drop(['MODEL'], axis=1)#удаляем поле из-за требований варианта
#Удаление пустых объектов не производится вследствии их отсутсвия (везде 639, нулевых обьектов нет)
#Замена текста:
print(df.MAKE.unique())#отображение текста, который надо заменить на цифры
print(df['VEHICLE CLASS'].unique())#отображение текста, который надо заменить на цифры
print(df.TRANSMISSION.unique())#отображение текста, который надо заменить на цифры
print(df.FUEL.unique())#отображение текста, который надо заменить на цифры
MAKE = {'ACURA':0, 'AUDI':1, 'BMW':2, 'BUICK':3, 'CADILLAC':4,'CHEVROLET':5, 'CHRYSLER':6, 'DAEWOO':7, 'DODGE':8, 'FERRARI':9, 'FORD':10, 'GMC':11, 'HONDA':12, 'HYUNDAI':13, 'INFINITI':14, 'ISUZU':15, 'JAGUAR':16, 'JEEP':17, 'KIA':18, 'LAND ROVER':19, 'LEXUS':20, 'LINCOLN':21, 'MAZDA':22, 'MERCEDES-BENZ':23, 'NISSAN':24, 'OLDSMOBILE':25, 'PLYMOUTH':26, 'PONTIAC':27, 'PORSCHE':28, 'SAAB':29, 'SATURN':30, 'SUBARU':31, 'SUZUKI':32, 'TOYOTA':33, 'VOLKSWAGEN':34, 'VOLVO':35,}#замена текста на цифры
VEHICLE_CLASS = {'COMPACT':0, 'MID-SIZE':1, 'SUBCOMPACT':2, 'STATION WAGON - MID-SIZE':3, 'MINICOMPACT':4, 'TWO-SEATER':5, 'STATION WAGON - SMALL':6, 'FULL-SIZE':7, 'SUV':8, 'VAN - CARGO':9, 'VAN - PASSENGER':10, 'PICKUP TRUCK - STANDARD':11, 'PICKUP TRUCK - SMALL':12, 'MINIVAN':13,}#замена текста на цифры
TRANSMISSION = {'A4':0, 'M5':1, 'AS5':2, 'AS4':3, 'M6':4, 'A5':5, 'A3':6, 'AS6':7,}#замена текста на цифры
FUEL = {'X':0, 'Z':1, 'E':2, 'N':3, 'D':4,}#замена текста на цифры
df=df.replace(MAKE)#перезапись данных в переменную
df=df.replace(VEHICLE_CLASS)#перезапись данных в переменную
df=df.replace(TRANSMISSION)#перезапись данных в переменную
df=df.replace(FUEL)#перезапись данных в переменную
[/CODE]
3)Создание выборок
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[CODE]
# Для прогнозирования
df_reg_data=df.drop(['FUEL CONSUMPTION'], axis=1)#все поля, кроме прогназируемого (выкинули поле прогназирования)
df_reg_target=df['FUEL CONSUMPTION']#только поле, которое прогназируем (выбрали только поле прогназирования)
# Для классификации
df_cl_data=df.drop(['MAKE'], axis=1)#все поля, кроме классифицируемого (выкинули поле прогназирования)
df_cl_target=df['MAKE']#только поле, которое классифицируем (выбрали только поле прогназирования)
# Теперь деление на входные и выходные обучающие и тестовые
data_train_reg, data_test_reg, target_train_reg, target_test_reg = train_test_split(
df_reg_data, df_reg_target,
test_size=0.3, random_state=42 #делим на 30% и перемешеваем, чтобы разнообразные данные попали 
)
# делим переменные из прошлого блока на части: тренировочную (на которой программа учится) и тестовую (через которую программа предсказывает),
# в соотношении 70/30
data_train_cl, data_test_cl, target_train_cl, target_test_cl = train_test_split(
df_cl_data, df_cl_target,
test_size=0.3, random_state=42
)
# делим переменные из прошлого блока на части: тренировочную (на которой программа учится) и тестовую (через которую программа предсказывает),
# в соотношении 70/30
[/CODE]
3) Классификация методом логистической регрессии
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[CODE]
data_train_log, data_test_log, target_train_log, target_test_log = train_test_split(
df_cl_data, df_cl_target,
test_size=0.3, random_state=17
)
logistic_regression = LogisticRegression(solver='newton-cg', max_iter=200)  # Увеличиваем max_iter до 200
model_log=logistic_regression.fit(data_train_cl,target_train_cl)
predicted_log = model_log.predict(data_test_cl)
# создаем табличку из двух колонок Предсказаные значения и Реальные значения
results_table = pd.DataFrame(list(zip(predicted_log, target_test_cl)))
results_table.columns = ['Предсказано', 'На самом деле']
print(results_table)
confusion_scores = confusion_matrix(target_test_cl, predicted_log)
confusion_df = pd.DataFrame(confusion_scores, columns=np.sort(target_test_cl.unique()), index=np.sort(target_test_cl.unique()))
# Не забудьте подписать классы
labels = ['ACURA,AUDI,BMW,BUICK,CADILLAC,CHEVROLET,CHRYSLER,DAEWOO,DODGE,FERRARI,FORD,GMC,HONDA,HYUNDAI,INFINITI,ISUZU,JAGUAR,JEEP,KIA,LAND ROVER,LEXUS,LINCOLN,MAZDA,MERCEDES-BENZ,NISSAN,OLDSMOBILE,PLYMOUTH,PONTIAC,PORSCHE,SAAB,SATURN,SUBARU,SUZUKI,TOYOTA,VOLKSWAGEN,VOLVO']
sns.heatmap(confusion_df, annot=True,xticklabels=labels,yticklabels=labels).plot()
[/CODE]
Выведенные данные:
Предсказано На самом деле
0 5 5
1 24 15
2 33 33
3 9 9
4 35 35
.. ... ...
187 1 35
188 11 11
189 11 5
190 27 27
191 2 23

[192 rows x 2 columns]
Ошибка происходит в этом участке кода:
Python
1
2
3
4
5
6
7
[CODE]
confusion_scores = confusion_matrix(target_test_cl, predicted_log)
confusion_df = pd.DataFrame(confusion_scores, columns=np.sort(target_test_cl.unique()), index=np.sort(target_test_cl.unique()))
# Не забудьте подписать классы
labels = ['ACURA,AUDI,BMW,BUICK,CADILLAC,CHEVROLET,CHRYSLER,DAEWOO,DODGE,FERRARI,FORD,GMC,HONDA,HYUNDAI,INFINITI,ISUZU,JAGUAR,JEEP,KIA,LAND ROVER,LEXUS,LINCOLN,MAZDA,MERCEDES-BENZ,NISSAN,OLDSMOBILE,PLYMOUTH,PONTIAC,PORSCHE,SAAB,SATURN,SUBARU,SUZUKI,TOYOTA,VOLKSWAGEN,VOLVO']
sns.heatmap(confusion_df, annot=True,xticklabels=labels,yticklabels=labels).plot()
[/CODE]
Подробное описание ошибки:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[CODE]ValueError                                Traceback (most recent call last)
Cell In[154], line 2
      1 confusion_scores = confusion_matrix(target_test_cl, predicted_log)
----> 2 confusion_df = pd.DataFrame(confusion_scores, columns=np.sort(target_test_cl.unique()), index=np.sort(target_test_cl.unique()))
      3 # Не забудьте подписать классы
      4 labels = ['ACURA,AUDI,BMW,BUICK,CADILLAC,CHEVROLET,CHRYSLER,DAEWOO,DODGE,FERRARI,FORD,GMC,HONDA,HYUNDAI,INFINITI,ISUZU,JAGUAR,JEEP,KIA,LAND ROVER,LEXUS,LINCOLN,MAZDA,MERCEDES-BENZ,NISSAN,OLDSMOBILE,PLYMOUTH,PONTIAC,PORSCHE,SAAB,SATURN,SUBARU,SUZUKI,TOYOTA,VOLKSWAGEN,VOLVO']
 
File ~\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\core\frame.py:827, in DataFrame.__init__(self, data, index, columns, dtype, copy)
    816         mgr = dict_to_mgr(
    817             # error: Item "ndarray" of "Union[ndarray, Series, Index]" has no
    818             # attribute "name"
   (...)
    824             copy=_copy,
    825         )
    826     else:
--> 827         mgr = ndarray_to_mgr(
    828             data,
    829             index,
    830             columns,
    831             dtype=dtype,
    832             copy=copy,
    833             typ=manager,
    834         )
    836 # For data is list-like, or Iterable (will consume into list)
    837 elif is_list_like(data):
 
File ~\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\core\internals\construction.py:336, in ndarray_to_mgr(values, index, columns, dtype, copy, typ)
    331 # _prep_ndarraylike ensures that values.ndim == 2 at this point
    332 index, columns = _get_axes(
    333     values.shape[0], values.shape[1], index=index, columns=columns
    334 )
--> 336 _check_values_indices_shape_match(values, index, columns)
    338 if typ == "array":
    339     if issubclass(values.dtype.type, str):
 
File ~\AppData\Local\Programs\Python\Python313\Lib\site-packages\pandas\core\internals\construction.py:420, in _check_values_indices_shape_match(values, index, columns)
    418 passed = values.shape
    419 implied = (len(index), len(columns))
--> 420 raise ValueError(f"Shape of passed values is {passed}, indices imply {implied}")
 
ValueError: Shape of passed values is (33, 33), indices imply (32, 32)[/CODE]
На сколько я понимаю, матрица несоответствий не может быть построена из-за разного размера.
Python
1
2
3
4
[CODE]
print(np.sort(target_test_cl.unique()))  # Сколько уникальных классов?
print(len(confusion_scores))  # матрица с количеством классов target_test_cl
[/CODE]
Ответ программы:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 22 23 24 25
27 28 29 30 31 33 34 35]
33
Т.е. матрица confusion_scores должна быть равна количеству классов target_test_cl. Но почему то это не так, 35=33. Следовательно возникает ошибка. Также indices imply (32, 32), а должно быть также 35, насколько я понимаю.
Прошу помогите, как это можно исправить и из-за чего может подобное возникать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2024, 16:08
Ответы с готовыми решениями:

Работа с Jupyter Notebook
Не работает Jupyter Notebook. После ввода действия в ячейку, нажимаю Run и появляется новая ячейка, а действие не выполняется. Прочитал все...

Эмпирическая модовая декомпозиция (EMD) в Matlab, Jupyter Notebook, Python
Здравствуйте! Подскажите, работает кто с эмпирической модовой декомпозицией (EMD) в Matlab, Jupyter Notebook, Python? Подскажите, есть...

Информационная безопасность и искусственный интеллект(тема для диплома)?
Помогите выбрать тему на тему ИБ и ИИ. Проблема в том, что ИБ в универе преподавали, а вот вопросы о реальном применении ИИ (да и вообще о...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2024, 16:08
Помогаю со студенческими работами здесь

Комбинация обучения с учителем и обучения без учителя для извлечения знаний
Здравствуйте! :) Хотелось бы обратиться к знающим людям в области применения машинного обучения для решения прикладных задач в надежде...

Создание бота для мобильной игры TrafficRacer. Python. искусственный интеллект, нейронная сеть
На скриншоте нужно распознать все машинки, при этом сохраняя их расположение во что-то (список, число, строка и т.д.). Примерные мысли...

Jupyter Notebook
Здравствуйте.Работаю с jupyter,и немного не пойму как сохранить csv файл в excel себе на компьютер.Ниже код на чтение и запись в сам...

Jupyter notebook
Вообщем в этой среде только начал работать и когда начинаю запускать все ячейки по второму разу то у меня он не хочет ни чего вводит с...

Jupyter Notebook
Написал код в Microsoft visual studio на С++, но нужно его перегнать на Jupyter Notebook пытался это сделать в итоге часть ошибок пофиксил,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru