シリーズ機械学習ベース(2) - データの前処理

この記事では、PWN2WEBの元で複製、ソースを明記してください

最終結果はのメリットに依存学ぶためにアルゴリズムを機械学習データ品質とデータが含まれ、有用な情報の量を巨大な役割を果たしてきましたモデルの効率にデータの処理します。

欠落したデータ処理 

データ収集エラーが欠損値につながり、我々はこれらの欠損値に対処する必要があるので、これらの欠損値を無視することはできません。

まず、問題の記述例にcsvファイルを構築します。

CSVファイルの構造は次のとおりです。

  •  read_csv関数は、データパンダCSV形式のデータフレーム(データフレーム)を読み取ることです
  • 我々はハードディスクに保存されたCSVファイルデータにある場合は、ファイルデータから文字列へのこの関数の方法で読み取ることができ、かつcsv_dataデータフレームに割り当てられたフォーマットに変換:デモはStringIOは唯一の役割を持っています

この方法は0x01 - 欠けている特徴値または削除サンプル

最も簡単な方法は、直接欠落データを削除することで、使用することができる方法はdropna、すなわちdf.dropna()であります

 あなたが削除したい場合は、その後、あなたはパラメータの軸を追加する必要があり、削除行、列に、デフォルトの機能を見ることができます:

 軸のNaNを含む列を削除する= 1つの手段は、NaN 0が示す削除された行は、値を有します

 この機能のいくつかの他のパラメータがあります。

  • すべての列がNaNでの行全体を廃棄する(方法=「全て」)dr​​opna
    • www.wityx.com
    dropna(THRESH = 4)は、行NANで少なくとも4つの非廃棄値に達していません
    • www.wityx.com
  • dropna(サブセット= [「C」]は)NaN値は、行の特定の列に表示され、削除しました

0x02の欠落したデータの塗りつぶし

列全体または行が十分ではありません一般的に削除され、あなたは我々が異なる使用することができ、その場合には、貴重なデータ、多くの負け補間技術を、最も一般的なのは、ある平均転嫁することにより、データその他のトレーニングのデータセット行方不明を推定します値、我々は使用転嫁のクラスの実装を

一般に、平均補間演算は、平均行または列の補間が行われており、以下のコード、ここで、軸= 1は、行ごとに及び行方不明の平均値に加えて、他のすべての数値について計算し、充填されています。

www.wityx.com= 0軸は、その平均値を列毎に算出されます。

 一方、特定の状況で特定の用途に応じて、中央値ストラテジパラメータとmost_frequentがあってもよいです

ここでは、Imputerコンバータ型のAPI、2つの一般的に使用される方法が適合していると、変換、2つのを参照してください記事の違い:https://blog.csdn.net/weixin_38278334/article/details/82971752

データ処理の二つのカテゴリー

実際の生活状況は、多くの場合、特徴データ列の1つ以上のカテゴリを発生します。カテゴリデータは、さらに彼らのに分けることができる議論では、公称の特徴機能を命じたが、注文した機能が整然とした並び替えた場合、または値カテゴリを理解することができます。特性が提供されていません公称ソート。この質問を議論する前に、我々は最初のデータセットを構築します:

 0x01では、マッピング機能を命じました

一般的に、このアルゴリズムは、効果的かつ効率的に注文した機能を使用できることを確実にするために、我々は文字列を整数に変換する必要があり、我々は手動で通常設定さをマッピングする必要があります。

0x02のクラスの基礎となるコーディングを

私たちは、長いものへの一つとしてとして、実際には、これらの数字の順序は意味がありません、それについて考える、前のセクションのマッピングと秩序の特徴に言及し、ここでヒントです:

 列挙(列挙)を介してclassmapping1は、私が説明ここの後ろにこのclass_mapping1辞書コードは、どのような原則であります

首先,np.unique( ) 函数,转自(https://blog.csdn.net/u012193416/article/details/79672729):

那就是说,将 将df1中的classlabel这个标的所有值去除重复值取出来

 然后是我们的enumerate函数,这个函数主要是将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列

 然后我们回过头来看label:idx这个东西,我们先看这个

这个map对应的是   label:数字 , 但是label:idx这种写法就是将字典的键值对转换成这种表达方式

最后就是for idx,label in 这句话就是将idx,label组合并分别赋值

上面两种方案太麻烦了,使用LabelEncoder类可以更加方便的完成对类标的整数编码工作

0x03 标称特征上的one-hot编码

用上面的方法去标识标称特征往往会出现如blue=1 > red=0这种情况,然而blue和red是无法比较的,这种情况下我们就要用到one-hot编码了

具体可参考:

https://zhuanlan.zhihu.com/p/35287916

https://www.imooc.com/article/35900

我简要说明一下,举例:{红,黄,蓝},{男,女},{东,西,南,北}、

首先,红黄蓝,一个特征三个类别,那就是N=3,就用三位数表示:100红 010黄 001蓝

其次,男女,一个特征两个类别,那就是N=2,就用两位数表示:10男  01女

东西南北以此类推。当一个样本为[男 黄 女 蓝 北]时,就直接按顺序把对应的编码放进去就行了:[1,0,     0,1,0,     0,1,     0,0,1,     0,0,0,1] 。这样的化会让特征空间很大,一般会结合PCA使用,我们后面会说到。

三  训练集和测试集划分

这部分虽就简单的几行代码,但是需要注意的有很多

选取UCI的葡萄酒数据举例,一共13个特征,下面第二个cell的第二行,是将numpy数组的第2-13个特征赋值给X,第一个类标特征赋值给y。这里简要介绍一下,df_wine.iloc[:, 1:]这个东西,逗号前的那个冒号,意味着第几条到第几条数据传给X,因为是冒号,那么就是所有。逗号后的1:,是第几个到第几个的特征赋值。

 之后,我们要70:30划分数据集和测试集(即上图种的0.3),实际应用中,我们基于数据大小划分数据集,一般是60:40, 70:30,80:20,对于非常庞大的数据集,那就是90:10或者99:1了,然而,测试集不能太小,否则就会对泛化误差的估计将会越不准确。

四 将特征的值缩放到相同的区间

特征缩放的定义是特征缩放就是标准化数据特征的范围,从而使得每个特征的范围有可比性,比如将取值范围处理为0到1之间。

将特征缩放到相同的区间有归一化标准化两个常用方法。

归一化:一般是缩放到[0,1]区间,为最小-最大缩放的一个特例

from sklearn.preprocesing import MinMaxScaler
mms = MinMaxScaler()

标准化:可以将均值设为0,方差设为1,使得特征列的值呈标准正态分布,易于权重的更新。

sklearn.preprocessing インポートStandardScaler 
stdsc = StandardScaler()
184元記事公開 ウォンの賞賛141 ビューに35万+を

おすすめ

転載: blog.csdn.net/sinat_27535209/article/details/104007102