目次
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 とします。
参照:
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