我在读取.csv文件的列时遇到问题。我有这个密码:
# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# Importing the dataset
dataset = pd.read_csv('D:/CTU/ateroskleroza/development/results_output6.csv')
print(dataset.head())
X = dataset.iloc[:, 2:16].values
y = dataset.iloc[:, 0].values
# Splitting the dataset into the Training set and Test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
classifier = make_pipeline(StandardScaler(), SVC(gamma='auto'))
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
# Making the Confusion Matrix
cm = confusion_matrix(y_test, y_pred)
print(cm)
# Generating accuracy, precision, recall and f1-score
target_names = ['Progressive','Stable']
print(classification_report(y_test, y_pred, target_names=target_names))
.csv如下所示:
根据图片的名称,他们有一些列,其他一些与楠。问题是,当我尝试执行此代码时,出现以下错误:
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
那么我怎么能忽略nan而只使用数字呢(我不想删除空列,只是在执行时忽略nan)。
1条答案
按热度按时间mtb9vblg1#
我是根据个人经验写这个答案的。如果你想要一个更详细的答案,可以考虑用我们可以使用的数据集更新你的帖子,说明模型应该预测什么并描述特性。
@simpleapp建议在缩放数据和拟合模型之前用零替换空值。在注解中,您似乎关心在最终模型中输入空值的影响。
在处理缺失数据时,必须权衡插补值的利弊。如果您决定忽略具有空值的观测值(通过删除列或整个观测值),则可能会遗漏一些真正重要的信息,并且除非新观测值的数据已完全填满,否则您将无法对其进行预测。同样,如果您不小心用一些随机值来填充空值,您可能会给模型引入偏差。
如果您正确地输入值,您的模型将能够处理丢失的数据,而不会影响其准确性。可悲的是,估算价值与其说是一门硬科学,不如说是一门艺术。
我不知道你的数据是什么意思,但把年龄作为预测心脏病风险的独立变量。扪心自问:如果缺少一个值,我最好忽略观察结果,或者我可以用一个值来填补空白,平均来说,这个值不应该离患者真正未观察到的年龄太远吗?
如果你决定用一些值来填充缺失的信息,我建议四种非常简单的方法:
您的下一步应该是对结果模型进行评分,并选择一个对看不见的数据概括得最好的模型。
在其他常见的插补技术中,可以用零填充空值(
df.fillna(0)
),使用最频繁的值(检查simpleimputer)或使用更复杂的插补技术,例如最近邻。最后,当您在看不见的数据上测试模型的性能时,您将发现输入null是否是正确的做法。
一般来说,您应该考虑删除丢失值超过20%的所有列。