2016-09-17 6 views
-5

複数の機能を持つデータセット(例:http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data)があり、それらの観測の中には物理的な意味がないことがわかっているとします。モデルをトレーニングするときにcsvファイルの行を削除または無視するにはどうすればよいですか?

上記の例では、皮膚厚さの値が0であり、インスリンは明らかにノイズです。このデータセットを使用してモデルを訓練するには、最初にこの無意味なデータを取り除く必要があります。そのためには、どうすればいいか分かりました。ピマインディアン糖尿病データセット内

+0

コードは次のようになります。 –

+3

ようこそ!あなたは誰かにあなたのためのコードを書くよう求めているようです。 Stack Overflowは、コード作成サービスではなく、Q&Aサイトです。効果的な質問を書く方法については、こちらをご覧ください(http://stackoverflow.com/help/how-to-ask)。 – JGreenwell

+0

あなたはどのモデリングソフトウェア/モジュールを使用していますか? – martineau

答えて

1

欠損値

  • ログインhttps://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes

    それは述べて:「** UPDATE:2011年2月28日までは、このWebページが示さ あったことがありませんデータセットの値が欠落している リポジトリのユーザーが指摘したように、これは真実ではありません。場所にゼロがあります。 生物学的に不可能な場所、たとえばt彼血圧 属性。ゼロ値が欠けている可能性があります。 データ。しかし、データセットのドナーはそのような声明を行われていないので、私たちはあなたの最良の判断を使用することをお勧めしますし、あなたの仮定を述べる 」

    あなたが不足している値を削除したい場合は血圧属性が0であり、あなたが行を削除することができます、

    議論ピマイ​​ンディアン糖尿病データセット:。

  • は、私はまた、この データセット内の欠損値を議論する1枚の用紙に出くわしたThe Problem of Disguised Missing Data

    ページ番号84と

    紙からのハイライト: Breaultは、この完全なケース分析 が392に768人の患者から有効サンプルサイズを低減していても、 装っ欠損値を省略することにより、一般的に、より良い結果を得ることができました。 訪問リンク:データセットへの対処

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の分散があります。 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は、機械学習のすべての基本アルゴリズムを実装しています。

ロジスティック回帰

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)) 

希望、これは便利です: 次の例を試してみてください。

+0

こんにちはサヤリ、助けてくれてありがとう。実際、私はデータセットを拡大し、そのためにPCAを行った。私の目標は、k平均クラスタリングを実行するために最初の3つのコンポーネントを使用することです。 n_clusters = 3に設定するとシルエット係数が最も高くなるため、結果に満足できません。データのラベルが0か1のどちらかであることがわかっているので、n_clusters = 2が最良の結果をもたらすことが期待されます。だから私は結果がデータの欠損値の影響を受けていたと思います。データにスケーリングを行うと、この問題は自動的に修正されることを提案していますか? –

+0

データ前処理部を実行してからPCAを試してください。結果が改善する可能性があります。 –

関連する問題