データ分析 Python 包括的プロセス

目次

1. データ読み込み

1.1. 通話

1.2. 共通ファイル読み込み

2. データの前処理

2.1. 欠損値処理

2.2. 重複値処理

 2.3. 特徴のエンコーディング

 2.4. 次元削減 (オプション)

2.5. 機能のスケーリング

2.6. その他のキー機能

3. モデルの構築

3.1. 線形モデル

3.1.1. 最小二乗法

3.1.2. リッジ回帰

 3.1.3. なげなわ

3.1.4. BayesianRidge ベイジアン回帰

3.1.5. ロジスティックロジスティック回帰

3.2. サポートベクターマシン (SVM)

3.3. 確率的勾配降下 SGD 


1. データ読み込み

1.1. 通話

#调用pandas库
import pandas as pd

1.2. 共通ファイル読み込み

CSV ファイル:コンマで区切られたさまざまな機能値を持つ表形式のファイル。

df_origin=pd.read_csv(filepath_or_buffer)

一般的なファイル:一般的な形式のファイルをサポートします。

df_origin=pd.read_table(filepath_or_buffer)

ピクルスファイル

df_origin=pd.read_pickle(filepath_or_buffer)

その他のファイル: Excel、Json、Html など。

リファレンス: pandas.read_pickle — pandas 1.4.3 ドキュメント

2. データの前処理

2.1. 欠損値処理

#查看缺失值
df_origin.isna()

#删除缺失值
df_nona=df_origin.dropna()

#填补缺失值
#缺失值变为数值
df_nona=df_origin.fillna(0)

#缺失值由字典填补,a、b、c为特征即a特征的缺失值都变为0
df_nona=df_origin.fillna('a':0,'b':1,'c':2)

#缺失值变为同一特征上一对象的记录
df_nona=df_origin.fillna(method='ffill')

リファレンス:  pandas.DataFrame.fillna — pandas 1.4.3 ドキュメント

2.2. 重複値処理

#查看重复值: 表格自上而下第一个会显示False,出现和上面重复的值会显示True
df_nona.duplicated()

#去除重复值
df_nodup=df_nona.drop_duplicates()

#去除特定列有重复值的行
df_nodup=df.nona.drop_duplicates(subset=['Price'])

重複値の処理には注意が必要です: 重複値の乱暴な削除はデータ分布の変化につながるため、重複値を削除した後に重複値データに重みを追加することを選択できます。たとえば、レコードがなく、18 個の重複値が削除された場合、元の値を持ってきて、Weight=19 とします。

参照:

pandas.DataFrame.drop_duplicates — pandas 1.4.3 ドキュメントhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html

 2.3. 特徴のエンコーディング

マシンは数値しか認識できないため、名目上の特徴のカテゴリ特徴 (文字列またはその他の型) を数値型の整数コードに変更する必要があります。

#OrdinalEncoder是将特征值bian为0到n_categories - 1的范围内
enc = preprocessing.OrdinalEncoder()
enc.fit(df_nudup.X)  #X是特征名
enc


OrdinalEncoder は非数値データを順序付けられた数値に変換するため、モデルの確立に影響を与えるため、ワンホット エンコーディングまたはダミー エンコーディングとも呼ばれる one-of-K を使用できます。

n 個の固有値を長さ n のバイナリ固有ベクトルに変換します。各値は 1 ビットのみが 1 で、残りは 0 です。

enc = preprocessing.OneHotEncoder()
enc.fit(df_nodup.X)  
df_nodup

#可查看转换值
enc.transform([['female', 'from US', 'uses Safari'],
...                ['male', 'from Europe', 'uses Safari']]).toarray()
array([[1., 0., 0., 1., 0., 1.],
       [0., 1., 1., 0., 0., 1.]])

 参考:  https: //www.sklearncn.cn/40/

 2.4. 次元削減 (オプション)

2 次元データの場合、元のデータ ポイントが新しい固有ベクトルの 1 つに収まるように新しい 2 次元空間を作成し、他の新しい空間の固有ベクトルの固有値は 0 になり、固有ベクトルは無意味な 2D になります。ベクトルは 1 次元ベクトルになります。N次元も同様です。

次元削減は複数の元の特徴を結合するため、特徴とラベルの関係を調べるモデル (線形回帰など) には適していません。

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca=pca.fit(df_nodup)
df_dr=transform(df_nodup)#获得新的矩阵

print(pca.explained_variance_ratio_)
print(pca.singular_values_)

2.5. 機能のスケーリング

 平均が 0 で分散が 1 になるように、すべての特徴を [0, 1] または [-1, 1] にスケーリングします。

#特征缩放
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train) # Don’t cheat - fit only on training data
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test) # apply same transformation to test data

2.6. その他のキー機能

#添加行,df2是相同特征的列表
df_nodup.append(df2)

#数组(series)的组合行是concat
s1 = pd.Series(['a', 'b'])
s2 = pd.Series(['c', 'd'])
pd.concat([s1, s2])

3. モデルの構築

3.1. 線形モデル

3.1.1. 最小二乗法

二乗誤差の合計を最小化する線形モデルを当てはめます。

from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit (X,Y)
reg.coef_
>>> array([ 0.5,  0.5])

3.1.2. リッジ回帰

通常の最小二乗法のオーバーフィッティングの問題に対処するために、係数の大きさにペナルティが課されます。

from sklearn import linear_model
reg = linear_model.Ridge (alpha = .5)
reg.fit (X,Y)

 3.1.3. なげなわ

 Ridge との違いは、通常の Loss Function の後に L1 パラダイムが追加されていることです。

from sklearn import linear_model
reg = linear_model.Lasso(alpha = 0.1)
reg.fit(X,Y)
reg.predict(test_X)

3.1.4. BayesianRidge ベイジアン回帰

ベイジアン回帰は、推定段階でパラメーターの正則化に使用できます。

from sklearn import linear_model
reg = linear_model.BayesianRidge()
reg.fit(X, Y)

3.1.5. ロジスティックロジスティック回帰

3.2. サポートベクターマシン (SVM)

高次元空間に対応

#分类问题
from sklearn import svm
clf = svm.SVC(gamma='scale')
clf.fit(X, y)
#回归问题
from sklearn import svm
clf = svm.SVR()
clf.fit(X, y)

3.3. 確率的勾配降下 SGD 

大規模でスパースな機械学習の問題に適用できます。平均が 0 で分散が 1 になるように、すべての特徴を [0, 1] または [-1, 1] にスケーリングすることを強くお勧めします。

#特征缩放
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train) # Don’t cheat - fit only on training data
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test) # apply same transformation to test data
from sklearn.linear_model import SGDClassifier
clf = SGDClassifier(loss="hinge", penalty="l2")
clf.fit(X, y)

3.4. 最近傍

from sklearn.neighbors import NearestNeighbors
import numpy as np
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
distances, indices = nbrs.kneighbors(X)

3.5. ガウス単純ベイズ

特徴の尤度 (確率) は、ガウス分布であると想定されます。

from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)

3.6. 決定木

#分类
from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)
clf.predict(X)
clf.predict_proba(X)#样本中Y各分类的概率
#回归
from sklearn import tree
clf = tree.DecisionTreeRegressor()
clf = clf.fit(X, y)
clf.predict(test_X)

 3.7. アンサンブル法

3.7.1. 袋詰め

from sklearn.ensemble import BaggingClassifier
from sklearn.neighbors import KNeighborsClassifier
bagging = BaggingClassifier(KNeighborsClassifier(),
...                             max_samples=0.5, max_features=0.5)

3.7.2. ランダムフォレスト

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=10)
clf = clf.fit(X, Y)

3.7.3. エクストリームランダムツリー

各ノードの識別しきい値はランダムに生成され、最良のしきい値がセグメンテーション ルールとして選択されます。

効果: バイアスをわずかに増加させる代わりに、モデルの分散を少し減らすことができます。

from sklearn.model_selection import cross_val_score
>>> from sklearn.datasets import make_blobs
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.ensemble import ExtraTreesClassifier
>>> from sklearn.tree import DecisionTreeClassifier

>>> X, y = make_blobs(n_samples=10000, n_features=10, centers=100,
...     random_state=0)

>>> clf = DecisionTreeClassifier(max_depth=None, min_samples_split=2,
...     random_state=0)
>>> scores = cross_val_score(clf, X, y, cv=5)
>>> scores.mean()                               
0.98...

>>> clf = RandomForestClassifier(n_estimators=10, max_depth=None,
...     min_samples_split=2, random_state=0)
>>> scores = cross_val_score(clf, X, y, cv=5)
>>> scores.mean()                               
0.999...

>>> clf = ExtraTreesClassifier(n_estimators=10, max_depth=None,
...     min_samples_split=2, random_state=0)
>>> scores = cross_val_score(clf, X, y, cv=5)
>>> scores.mean() > 0.999
True

おすすめ

転載: blog.csdn.net/xzhu4571/article/details/125490416