Pythonの機械学習ベースのチュートリアル - 教師あり学習

1.分類および回帰

  カテゴリーは:これらのタグのいずれかに与えられたラベル、データの新部門に基づいています

  戻り値:つまり、物事のいくつかの特性に応じて、物事の他の特性を決定するためにどの区間の範囲内

    たとえば、次の人の収入の範囲を決定するなど、教育、年齢、の人のレベルによると、

  差分:分類出力を離散、固定されている点である。回帰連続出力間隔です。

2.一般化、オーバーフィッティングとunderfitting

  汎化:データの正確な予測をすることができるモデルは見ていない、モデルがテストセットにトレーニングセットから一般化できると言います

  過剰適合:構築したモデルは、そのための既存のデータモデルはトレーニングセットの詳細を過度に懸念しているため、あまりにも複雑で、トレーニングセット上で良好なパフォーマンスを持って取得しますが、新しいデータに一般化することはできません。

  Underfitting:貧困層にトレーニングセット上のモデルの性能は、underfittingされます

3.教師付き学習アルゴリズム

3.1いくつかのサンプルデータセット

データセットをscikit-学び、実際のデータを含むバンチオブジェクトであり、データの一部が(辞書のような)情報を設定します

3.1.1鍛造データセット

必要なパッケージをインポート

 

前記二つのデータセット鍛造

#は、データセットの生成 
X、Y = mglearn.datasets.make_forge()#の X とYの2つの機能が鍛造返される
プリント( "X.shape:{}" 。フォーマット(X.shape))#1 X.shapeを:( 26、2)
#データセットプロット
mglearn.discrete_scatter(X [:0] 、X [:1]、y)を# 0とx軸、Y-Y軸として第1列の入力X
plt.legend([「クラス0「」クラス1 『] 、LOC = 4)#1 カテゴリ名設定画像
plt.xlabel(』第一の特徴『)#は、画像のx軸の名前設定
画像を設定する第二の特徴「)#1、y軸plt.ylabelを(』名前

3.1.2波データセット

波形特徴データセットは、(Y軸は出力を表し、x軸が表す)のみ1つの入力と連続目的変数であります

X-、Y = mglearn.datasets.make_wave(N_SAMPLES = 40 )#40のデータを生成する、X.shapeが(40,1)である、y.shapeは(40)である
plt.plot(X、Y、' O ' ) #点線の円は、使用示し
plt.ylimを( -3 ,. 3 )部#y軸表示範囲設定
plt.xlabel(フィーチャー
plt.ylabel(ターゲット

3.1.3がんのデータセット

癌の臨床測定データセットは、データ乳房腫瘍、良性および悪性の腫瘍マーカーの各々を記録し(すなわち、2つのラベルのみ)

sklearn.datasets インポートload_breast_cancerの = load_breast_cancer()
 プリント(cancer.keys())
 >>> dict_keys([ ' データ'' 目標'' target_names '' DESCRは'' FEATURE_NAMEに'' ファイル名' ])

プリント(cancer.data.shape)
プリント(cancer.target.shape)
プリント(cancer.target_names)
プリント(cancer.feature_names)
>>>(569、30)
>>>(569)
>>> [ '悪性「良性」]
>>> ['の半径を意味'意味テクスチャ'境界を意味「平均面積」「「平均「凹面点意味」「の凹部を意味」コンパクトを意味'」滑らかさを意味対称「対称エラー'凹状点エラー'コンパクトエラー『凹部エラー』 『滑らかエラー』領域エラー' 『境界エラー』半径誤差' 『テクスチャエラー』 『フラクタル次元を意味』 'フラクタル次元エラー」最悪半径『最悪テクスチャ』 『最悪の境界』 『最悪エリア』 『最悪滑らか』 『最悪コンパクト』 『最悪凹部』 『最悪凹面点』 『最悪対称』 '最悪のフラクタル次元 ']
{N:V ための N、V におけるジッパー(cancer.target_names、np.bincount(cancer.target))}
 >>> { ' 悪性':212、' 良性':357}

np.bincountの特徴:用于统计每个数字的出现次数

X = np.array([0、1、1、3、2、1、7])
a = np.bincount(x)
>>>array([1, 3, 1, 1, 0, 0, 0, 1])
# 如上例,x的范围就是0-7,bincount生成一个np.max(x)+1的array:a
# 当a要生成第一个数时,此时要生成的数字索引为0,就在x中找0出现了多少次,本例为1次,append进来
# 然后a生成第二个数,此时要生成的数组索引是1,就在x中找1出现了多少次,本例为3
# 依次遍历到7,即x

重みのnp.bincountパラメータ

np.array = W([0.3、0.5、0.2、0.7、1、-0.6 ])
我々はxの最大数は4、ビン5の数であることを確認できるように、インデックス値0〜 > 4 
X = np.array([2 ,. 1 ,. 3 ,. 4 ,. 4 ,. 3 ])
インデックス0 - > 0 インデックス1 - > Wの[1] = 0.5 インデックス2 - > W [0] = 0.3 。索引3 - > [2] + W [5] = 0.2 W - 0.6 = -0.4 索引4 - > W [3] + W [4] = + 0.7 = 1.7 1 
np.bincount(X、重み= W )
 このため、出力される:配列([0、0.5、 0.3、-0.4、1.7])

 

3.1.4ボストン住宅データセット

このデータセットは、506個のデータ点を含み、各データは、13項を指し

sklearn.datasets インポートload_boston 
ボストン = load_boston()
 プリント(boston.data.shape)
 >>>(506、13)

 

3.2 kの隣人

3.2.1 k近傍分類器、K-NNアルゴリズム

自分のカテゴリとして最近傍カテゴリに丸め

mglearn.plots.plot_knn_classification(N_NEIGHBORS = 1 

3人の隣人を取り、そして中に三つのカテゴリーに応じて、独自のカテゴリとして最大数が含まれています

mglearn.plots.plot_knn_classification(N_NEIGHBORS = 3)

 

k近傍の3.2.2応用

インポートデータ・セット、およびトレーニングセットとテストセットに分割

sklearn.model_selection インポートtrain_test_splitの
X、Y = mglearn.datasets.make_forge()
X_train、X_test、y_train、y_test = train_test_split(X、Y、random_state = 0)

隣人の数:輸入クラスとインスタンス化KNNアルゴリズム、およびパラメータを設定

sklearn.neighbors インポートKNeighborsClassifier 
CLF = KNeighborsClassifier(N_NEIGHBORS = 3)

(KNNは、計算例を予測するために、トレーニングデータセットのために保存される)分類器のトレーニングセットを使用してフィッティング

clf.fit(X_train, y_train)
>>>KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=None, n_neighbors=3, p=2, weights='uniform')

调用predict方法进行预测

clf.predict(X_test)
>>>array([1, 0, 1, 0, 1, 0, 0])
clf.score(X_test, y_test)
>>>0.8571428571428571

3.2.3 分析KNeighborsClassifier

绘制决策边界: 绘制1个,3个和9个邻居的决策边界

fig, axes = plt.subplots(1, 3, figsize=(10,3)) # 绘制一个1行3列的共3个子图; fig是主图,axes是子图
for n_neighbors, ax in zip([1, 3, 9], axes):
    clf = KNeighborsClassifier(n_neighbors=n_neighbors).fit(X, y)
    mglearn.plots.plot_2d_separator(clf, X, fill=True, eps=0.5, ax=ax, alpha=.4)
    mglearn.discrete_scatter(X[:,0], X[:,1], y, ax=ax)
    ax.set_title("{} neighbor(s)".format(n_neighbors))
    ax.set_xlabel("feature 0")
    ax.set_ylabel("feature 1")
axes[0].legend(loc=3)    # loc标示legend的位置是左下角还是右下角,还是上边

# # # 待更新

おすすめ

転載: www.cnblogs.com/draven123/p/11372904.html