我正在尝试用 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 数组,但我不确定还需要做什么。
根据 FlyingTeller 的评论 -
在对数据的性别和类别进行编码之前,您已将 X 设置为
data.values
。您的 X 的性别值为 M 和 F,这就是为什么它无法将这些值编码为浮点数(也无需将性别保存为浮点数)