Вопрос или проблема
Я совершенно новичок в машинном обучении. Пытаюсь разобраться, используя TensorFlow.
У меня есть такие данные:
[['0', '-0.500', ' 1.600', ' 0.280', ' -8.326', ' 6.827', ' 1.540', ' 0.998', ' 4', ' 1.404', ' 0.83', ' 3.58'], ['1', ' 1.260', ' 0.210', ' -7.562', ' 7.880', ' 1.880', ' -0.573', ' 9', ' 0.887', ' 4.80', ' 1.30', '']]
Для бинарных значений я использовал x_train = np.uint8 ([[int(j) for j in e] for e in data1])
.
Какой комментарий я должен использовать для дробных значений? Пожалуйста, помогите мне.
Добро пожаловать на форум 🙂
В Python есть следующие встроенные типы: bool
, int
, float
; вы можете преобразовать переменную в один из них, просто вызвав соответствующий конструктор.
float('0.5') # Возвращает число с плавающей запятой 0.5
bool(0) # Возвращает логическое значение False
int(1.2) # Возвращает целое число 1
Если вы не знаете, что делаете, numpy устарел в использовании np.int и np.float
, и в большинстве случаев вам следует предпочесть встроенные типы Python int
и float
.
Чтобы преобразовать массив в массив целых чисел в numpy, просто напишите
np.array(data1, dtype=int)
Теперь, поскольку ваши данные кажутся разнородными, возможно, вас заинтересуют библиотеки, такие как pandas, которые предлагают нечто вроде «усиленных» массивов numpy с pandas.DataFrame
, потому что они могут содержать значения нескольких типов данных.
import pandas as pd
data = [['0', '-0.500', ' 1.600', ' 0.280', ' -8.326', ' 6.827', ' 1.540', ' 0.998', ' 4', ' 1.404', ' 0.83', ' 3.58'], ['1', ' 1.260', ' 0.210', ' -7.562', ' 7.880', ' 1.880', ' -0.573', ' 9', ' 0.887', ' 4.80', ' 1.30', '']]
df = pd.DataFrame(data)
Это инициализирует DataFrame с колонками типа строка, так как это то, что находится в вашем списке значений. Затем вы можете преобразовать каждую колонку в нужный тип отдельно.
df[0] = df[0].astype(int) # Преобразует значения в первой колонке в целые числа
df[1] = df[1].astype(float) # Преобразует значения во второй колонке в числа с плавающей запятой.
Вы можете проверить это, распечатав df.dtypes
.
0 int64
1 float64
2 object
3 object
4 object
5 object
6 object
7 object
8 object
9 object
10 object
11 object
dtype: object
Ответ или решение
Чтение и обработка числовых значений, особенно с плавающей точкой, в машинном обучении является важной задачей. В этом контексте, когда вы имеете дело с данными, представленными в виде строк, вам необходимо убедиться, что корректно конвертируете эти значения в нужный числовой формат для дальнейшей обработки. Давайте разберём эту задачу более подробно, применяя подход TEA (Теория, Пример, Приложение).
Теория
Python предлагает богатый набор встроенных типов данных, включая int
для целых чисел и float
для чисел с плавающей точкой. Для работы с массивами числовых данных используется библиотека NumPy, которая значительно упрощает процесс манипуляции и обработки массивов. Важная деталь — с недавних пор использование np.int
и np.float
считается устаревшим, и рекомендуется использовать встроенные типы Python.
Рассматривая работу с массивами данных, следует выделить три этапа: 1) чтение данных, 2) преобразование их в нужный формат и 3) использование для анализа. Если вы работаете с гетерогенными данными (смешанными типами, например, и строками, и числами), библиотека Pandas предлагает более гибкий подход с помощью DataFrame, который позволяет легко конвертировать столбцы в нужные типы данных.
Пример
Ваши данные представлены в виде строк. Для преобразования их в массив чисел с плавающей точкой в NumPy вы можете воспользоваться следующим подходом:
import numpy as np
# Исходные данные
data1 = [['0', '-0.500', ' 1.600', ' 0.280', ' -8.326', ' 6.827', ' 1.540', ' 0.998', ' 4', ' 1.404', ' 0.83', ' 3.58'],
['1', ' 1.260', ' 0.210', ' -7.562', ' 7.880', ' 1.880', ' -0.573', ' 9', ' 0.887', ' 4.80', ' 1.30', '']]
# Преобразование данных в числа с плавающей точкой
x_train = np.array([[float(j) if j != '' else np.nan for j in row] for row in data1], dtype=float)
В этом коде мы используем списковое включение для преобразования каждой строки в массив чисел с плавающей точкой. Если строка пустая, используется np.nan
для обозначения отсутствующих данных.
Приложение
Далее, вы можете использовать преобразованные данные для обучения моделей машинного обучения, анализа, визуализации и других задач. Например, используя Pandas для более сложной обработки:
import pandas as pd
# Инициализация DataFrame с исходными данными
data = [['0', '-0.500', ' 1.600', ' 0.280', ' -8.326', ' 6.827', ' 1.540', ' 0.998', ' 4', ' 1.404', ' 0.83', ' 3.58'],
['1', ' 1.260', ' 0.210', ' -7.562', ' 7.880', ' 1.880', ' -0.573', ' 9', ' 0.887', ' 4.80', ' 1.30', '']]
df = pd.DataFrame(data)
# Преобразование типов данных в DataFrame
df = df.apply(pd.to_numeric, errors='coerce')
# Проверка типов данных
print(df.dtypes)
Этот код показывает, как преобразовать весь DataFrame в числовой формат, используя pd.to_numeric
, который автоматически заменяет некорректные преобразования на NaN, что удобно для дальнейшей очистки данных.
Таким образом, следуя этим шагам, вы сможете эффективно управлять числовыми данными в вашем проекте машинного обучения, обеспечивая корректную интерпретацию данных и их обработку для последующего обучения моделей. Не забудьте проверять и обрабатывать отсутствующие или некорректные значения, чтобы избежать ошибок во время обучения моделей.