#python #machine-learning
#python #машинное обучение
Вопрос:
мне нужна помощь, я работаю над машинным обучением. Я попытался импортировать набор данных, используя этот код:
# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset = pd.read_csv('Rural3.csv', low_memory=False)
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 77].values
# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
Однако появляется ошибка:
Ошибка значения: входные данные содержат бесконечность или слишком большое значение для dtype (‘float64’)
Что мне делать, пожалуйста? я новичок в python. Заранее спасибо.
Комментарии:
1. в какой строке была ошибка?
2. Вероятно, есть только
np.inf
значения вX
илиY
, которые вам нужно удалить. Вы можете найти эти значения с помощью фильтра, подобногоdataset.iloc[dataset.values==np.inf]
3.
X_test = sc.transform(X_test)
должно бытьX_test = sc.transform(X_test)
или изменить строку выше4. большое спасибо, что ответили мне, но что именно я должен делать? я не понял?
5. @yosemite_k , ошибки появляются в разделе масштабирования объектов .. ?! это что-то меняет?
Ответ №1:
Это решение работает хорошо, исправлена ошибка при преобразовании мощности
df =df[~df.isin([np.nan, np.inf, -np.inf]).any(1)]
Ответ №2:
Я бы посоветовал вам посмотреть, есть ли у вас значения null, после загрузки набора данных с помощью pandas выполните следующие действия:
dataset = dataset.dropna()
также убедитесь, что ваши значения X являются числовыми, вы можете использовать либо dataset.describe(), либо dataset.info ():
print(dataset.info()) # will give you info about the dataset columns
вы также можете попробовать обновить свой sklearn, в некоторых версиях sklearn есть известная ошибка (я не помню, какая именно)
# if you are using conda
conda install scikit-learn
# if you are using pip
pip install -U scikit-learn
Комментарии:
1. Большое спасибо, сэр, за ответ, я применил dataset.info функция, и в результате она выдает мне, что мой набор данных содержит: float64 (75), int64(1), object(2). Зная, что моя база содержит только числовые значения!! что такое объект dtype? и как я могу справиться с этим?
2. это означает, что у вас есть нечисловые значения в вашем наборе данных. объект — это тип данных, который не является ни числовым, ни датированным временем и т.д. Из dataset.info () мы видим, что у вас есть две функции, которые не распознаются как числовые, теперь попробуйте выполнить следующее
dataset = dataset[dataset.applymap(np.isreal).any(1)]
Ответ №3:
Попробуйте нормализовать, если ваши данные имеют очень большие значения. Вы можете найти больше информации здесь
Комментарии:
1. я использовал функцию .. но появилась другая ошибка.. Ошибка значения: входные данные содержат NaN, бесконечность или слишком большое значение для dtype (‘float64’) !
2. Хорошо, это означает, что у вас также есть значения null. Вот ссылка, которая поможет вам лучше выполнить предварительную обработку ваших данных — analyticsvidhya.com/blog/2016/07 /…
3. Спасибо, сэр, я пытался нормализовать, но это всегда одна и та же ошибка! как я могу справиться с inf и слишком большим значением? существует ли какой-либо другой тип переменной, например, больший, чем float 64? значение с плавающей точкой 128, которое я могу использовать вместо значения с плавающей точкой 64?
4. Используйте нормализацию min-max для получения значений от 0 до 1. И замените значения NaN либо средним, либо медианным. Если вы все еще сталкиваетесь с проблемой, опубликуйте выходные данные, которые вы предварительно обработали для ответа на вопрос.
Ответ №4:
Эта ошибка иногда вводит в заблуждение. если у вас есть пустые значения в наборе данных (что означает, что определенные функции в наборе данных имеют пустые значения), даже тогда вы можете получить ошибку такого типа. Как нам это решить…
- Скройте фрейм данных и экспортируйте их в csv. ниже приведен код «df» — это фрейм данных Dataframe в CSV
compression_opts = dict(method='zip',archive_name='out.csv')
df.to_csv('out.zip', index=False, compression=compression_opts)
Вы также можете попробовать это
df[df['column_name'] == ''].index
-
Определите объекты, которые имеют пустые значения, проанализировав выходной CSV.
-
Удалите полную запись, содержащую пустые значения, с помощью приведенного ниже кода
df = df.dropna(subset=['column_name'])
Ответ №5:
import numpy as np
df_new = df[np.isfinite(df).all(1)]
Это удаляет строки, содержащие значения infinity
или NaN