ValueError:无法将字符串转换为浮点数:'M'

问题描述 投票:0回答:1

我正在尝试用 Python 创建一个 ANN 来从数据集中预测某些内容(在本例中为糖尿病),并且我正在努力找出解决此错误的方法。

这是完整的代码:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, KFold, cross_val_score
from sklearn import preprocessing
from keras import Sequential
from keras.layers import Dense
from sklearn.metrics import confusion_matrix, accuracy_score

data = pd.read_csv('C:/Users/<<>>/Downloads/Dataset of Diabetes.csv')

# drop irrelevant columns
dropcols = ['ID', 'No_Pation']
data = data.drop(dropcols, axis=1)
data.info()

X = data.values
Y = data['CLASS'].values

label_encoder = preprocessing.LabelEncoder()
data['CLASS'] = label_encoder.fit_transform(data['CLASS'])
data['Gender'] = label_encoder.fit_transform(data['Gender'])
data['CLASS'].unique()
data['Gender'].unique()
data.info()


X = np.delete(X, 1, axis=1)

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=42)

X_train = np.asarray(X_train).astype(np.float32)
Y_train = np.asarray(Y_train).astype(np.float32)

classifier = Sequential()
classifier.add(Dense(units=10, activation='relu', input_dim=X.shape[1]))
classifier.add(Dense(units=10, activation='relu'))
classifier.add(Dense(units=1, activation='sigmoid'))
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
classifier.fit(X_train, Y_train, epochs=100, batch_size=10)

Y_pred = classifier.predict(X_test)
Y_pred_int = (Y_pred > 0.5).astype(int)
cm = confusion_matrix(Y_test, Y_pred_int)
acc = accuracy_score(Y_test, Y_pred_int)
print("Accuracy:", acc)
print("Confusion Matrix:\n", cm)

这是最后一个“data.info()”行返回的内容:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 12 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   Gender  1000 non-null   int32  
 1   AGE     1000 non-null   int64  
 2   Urea    1000 non-null   float64
 3   Cr      1000 non-null   int64  
 4   HbA1c   1000 non-null   float64
 5   Chol    1000 non-null   float64
 6   TG      1000 non-null   float64
 7   HDL     1000 non-null   float64
 8   LDL     1000 non-null   float64
 9   VLDL    1000 non-null   float64
 10  BMI     1000 non-null   float64
 11  CLASS   1000 non-null   int32  
dtypes: float64(8), int32(2), int64(2)
memory usage: 86.1 KB

这是我收到的错误消息:

Traceback (most recent call last):
  File "C:\Users\<<>>\PycharmProjects\AI2\NeuralNetwork.py", line 32, in <module>
    X_train = np.asarray(X_train).astype(np.float32)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not convert string to float: 'M'

我刚刚意识到的另一个错误(更多的是警告)是: 用户警告:请勿将

input_shape
/
input_dim
参数传递给图层。使用顺序模型时,更喜欢使用
Input(shape)
对象作为模型中的第一层。 super().init(activity_regularizer=activity_regularizer, **kwargs) 这是什么意思?

此外,我不断收到“ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点数)”的错误。

如果到目前为止我所做的还有任何其他问题,请告诉我!

非常感谢

数据集链接:https://data.mendeley.com/datasets/wj9rwkp9c2/1

我已经尝试将 X 和 Y 序列转换为 np 数组,但我不确定还需要做什么。

python data-preprocessing
1个回答
0
投票

根据 FlyingTeller 的评论 -

在对数据的性别和类别进行编码之前,您已将 X 设置为

data.values
。您的 X 的性别值为 M 和 F,这就是为什么它无法将这些值编码为浮点数(也无需将性别保存为浮点数)

© www.soinside.com 2019 - 2024. All rights reserved.