如何在训练模型时删除或忽略csv文件中的行?

时间:2016-09-17 01:47:22

标签: python machine-learning

假设您有一个包含多个功能的数据集(例如http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data),并且您意识到其中一些观察结果并不具备物理意义。

在上面的例子中,一些观察值对于皮肤厚度值为0,胰岛素明显是噪声。为了使用这个数据集训练一个模型,我们应该首先摆脱这个荒谬的数据,所以我想知道这样做的好方法是什么。

1 个答案:

答案 0 :(得分:1)

皮马印第安人糖尿病数据集缺失值

  • 访问https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes

    它声明:“**更新:截至2011年2月28日此网页显示 数据集中没有缺失值。正如所指出的那样 存储库用户,这不可能是真的:地方有零 它们在生物学上是不可能的,例如血压 属性即可。似乎零值编码缺失 数据。但是,由于数据集捐赠者没有做出这样的陈述 鼓励你用你最好的判断并陈述你的假设“

    如果要删除缺失值,可以删除血压属性为0的行。

  • 我还发现了一篇论文,讨论了这里的缺失值 数据集。 The Problem of Disguised Missing Data

    第84和85页:讨论Pima Indians糖尿病数据集,

    纸张亮点: 通过省略,Breault能够获得通常更好的结果 伪装的缺失值,即使这个完整的案例分析 将有效样本量从768名患者减少到392名

处理数据集: 访问链接:http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.names 它说数据中有一些缺失的值。

 Missing Attribute Values: Yes

 For Each Attribute: (all numeric-valued)
   1. Number of times pregnant
   2. Plasma glucose concentration a 2 hours in an oral glucose tolerance test
   3. Diastolic blood pressure (mm Hg)
   4. Triceps skin fold thickness (mm)
   5. 2-Hour serum insulin (mu U/ml)
   6. Body mass index (weight in kg/(height in m)^2)
   7. Diabetes pedigree function
   8. Age (years)
   9. Class variable (0 or 1)

目的是使用前8个变量来预测9。

实例总数:768

Class Distribution: (class value 1 is interpreted as "tested positive for
   diabetes")

   Class Value  Number of instances
   0            500
   1            268

阅读数据

import numpy as np
import urllib
# url with dataset
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
# download the file
raw_data = urllib.urlopen(url)
# load the CSV file as a numpy matrix
dataset = np.loadtxt(raw_data, delimiter=",")
# separate the data from the target attributes
X = dataset[:,0:8]
y = dataset[:,8]

数据预处理

大多数梯度方法(几乎所有机器学习算法都基于这些方法)对数据缩放非常敏感。因此,在运行算法之前,我们应该执行规范化或所谓的标准化。归一化涉及替换标称特征,使得它们中的每一个都在0到1的范围内。至于标准化,它涉及数据预处理,之后每个特征具有平均0和1的色散。 Scikit-Learn库为此提供了现成的功能:

from sklearn import preprocessing
# normalize the data attributes
normalized_X = preprocessing.normalize(X)
# standardize the data attributes
standardized_X = preprocessing.scale(X)

Scikit-Learn已经实现了机器学习的所有基本算法。 请尝试以下示例:

LOGISTIC REGRESSION

from sklearn import metrics
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)
print(model)
# make predictions
expected = y
predicted = model.predict(X)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))

希望这有用。