<jupyter_start><jupyter_text>[View in Colaboratory](https://colab.research.google.com/github/RXV06021/basicPy/blob/master/try_scikit_learn.ipynb)  Python scikit-learnの機械学習アルゴリズムチートシートを全実装・解説http://neuro-educator.com/mlcontentstalbe/[scikit-learnの機械学習アルゴリズムチートシート](http://scikit-learn.org/stable/tutorial/machine_learning_map/)  【１】SGDの実装とクラス分類http://neuro-educator.com/mlearn1/*   使用するアルゴリズム　　　　：SGD（stochastic gradient descent）*   使用する機械学習ライブラリ　：scikit-learn（サイキット・ラーン）[scikit-learnのマップ](http://scikit-learn.org/stable/tutorial/machine_learning_map/)より、　　START→データが50以上→カテゴリーデータ→ラベルありデータ→データ数10万以上→「SGD」**■　課題**ワイン178本のデータを使用し、未知のワインの色とプロリン（アミノ酸の一種）の量の2変数から、その未知のワインが3つのブドウ品種のどれから作られたのかを識別する識別器を作成すること**■　使用するデータ**ラベル：0, 1, 2（ブドウの品種）データ：178（ワインの数）変数1：ワインの色変数2：ワインに含まれるプロリンの量  解説０：必要なライブラリのインストール<jupyter_code>! pip install mlxtend<jupyter_output>Requirement already satisfied: mlxtend in /usr/local/lib/python3.6/dist-packages (0.12.0)
Requirement already satisfied: matplotlib>=1.5.1 in /usr/local/lib/python3.6/dist-packages (from mlxtend) (2.1.2)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from mlxtend) (39.2.0)
Requirement already satisfied: numpy>=1.10.4 in /usr/local/lib/python3.6/dist-packages (from mlxtend) (1.14.3)
Requirement already satisfied: scikit-learn>=0.18 in /usr/local/lib/python3.6/dist-packages (from mlxtend) (0.19.1)
Requirement already satisfied: scipy>=0.17 in /usr/local/lib/python3.6/dist-packages (from mlxtend) (0.19.1)
Requirement already satisfied: pandas>=0.17.1 in /usr/local/lib/python3.6/dist-packages (from mlxtend) (0.22.0)
Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.5.1->mlxtend) (1.11.0)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplo[...]<jupyter_text>解説１：ライブラリのインポート<jupyter_code>#解説 1：ライブラリのインポート--------------------------------

import numpy as np                    # numpyという行列などを扱うライブラリを利用
import pandas as pd                   # pandasというデータ分析ライブラリを利用
import matplotlib.pyplot as plt       # プロット用のライブラリを利用
from sklearn import linear_model, metrics, preprocessing, cross_validation   # 機械学習用のライブラリを利用
from mlxtend.plotting import plot_decision_regions                           # 学習結果をプロットする外部ライブラリを利用<jupyter_output><empty_output><jupyter_text>解説２：Wineのデータセットの読み込みhttps://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.dataからWineのデータを読み込んでいます。そのうち、品種(0列、1～3)と色（10列）とプロリンの量(13列)を使用します。●[Wineデータの詳細はこちら](https://archive.ics.uci.edu/ml/datasets/Wine)<jupyter_code># 解説 2：Wineのデータセットを読み込む--------------------------------
df_wine_all=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data', header=None)

# 品種(0列、1～3)と色（10列）とプロリンの量(13列)を使用する
df_wine=df_wine_all[[0,10,13]]
df_wine.columns = [u'class', u'color', u'proline']    # 列の名称を指定

pd.DataFrame(df_wine).head()                          # この行を実行するとデータの最初の5行が見れる
df_wine.describe()<jupyter_output><empty_output><jupyter_text>解説３：プロット<jupyter_code># 解説 3：プロットしてみる------------------------------------------------------

df_wine.plot(subplots=True, figsize=(9, 9)); plt.legend(loc='best')
# 解説 3：散布図----------------------------------------------------------------

x=df_wine["color"]
y=df_wine["proline"]
z=df_wine["class"]-1

plt.scatter(x,y,c=z)
plt.show()
# 解説 3：pandas plotを使った散布図----------------------------------------------

df1 = df_wine[df_wine['class']==1]
df2 = df_wine[df_wine['class']==2]
df3 = df_wine[df_wine['class']==3]

ax1 = df1.plot(kind='scatter', x='color', y='proline', color='red' )
ax2 = df2.plot(kind='scatter', x='color', y='proline', color='green'  ,ax=ax1)
df3.plot(      kind='scatter', x='color', y='proline', color='orange' ,ax=ax2)<jupyter_output><empty_output><jupyter_text>**※　matplotlib.pyplot.scatter の使い方**https://pythondatascience.plavox.info/matplotlib/%E6%95%A3%E5%B8%83%E5%9B%B3https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.htmlmatplotlib.pyplot.scatterhttps://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.htmlmatplotlib.pyplot.scatter(x, y, s=20, c=None, marker='o', cmap=None, norm=None,                          vmin=None, vmax=None, alpha=None, linewidths=None,                          verts=None, edgecolors=None, hold=None, data=None,                          **kwargs) ** ※　matplotlib.pyplot.scatter の主要な引数**   x, y：グラフに出力するデータ   s：サイズ (デフォルト値: 20)   c：色、または、連続した色の値   marker：マーカーの形 (デフォルト値: ‘o’= 円)   cmap：カラーマップ。c が float 型の場合のみ利用可能です。   norm：c を float 型の配列を指定した場合のみ有効。正規化を行う場合の Normalize インスタンスを指定。   vmin, vmax	：正規化時の最大、最小値。 指定しない場合、データの最大・最小値となります。norm にインスタンスを指定した場合、vmin, vmax の指定は無視されます。   alpha：透明度。0(透明)～1(不透明)の間の数値を指定。   linewidths：線の太さ。   edgecolors：線の色。  解説 4：データの正規化<jupyter_code>#解説 4：データの整形-------------------------------------------------------
X=df_wine[["color","proline"]]
sc=preprocessing.StandardScaler()
sc.fit(X)
X_std=sc.transform(X)

plt.plot(X_std) 


# Create plots with pre-defined labels.
fig, ax = plt.subplots()
ax.plot(X_std[:,0], 'r' , label='color')
ax.plot(X_std[:,1], 'b' , label='proline')

legend = ax.legend(loc='upper center', shadow=True, fontsize='x-large')

# Put a nicer background color on the legend.
legend.get_frame().set_facecolor('#00FFCC')

plt.show()<jupyter_output><empty_output><jupyter_text>解説5：機械学習で分類今回は線形分離のSGDを用いたClassifierを作成。<jupyter_code>#解説 5：機械学習で分類する---------------------------------------------------
clf_result=linear_model.SGDClassifier(loss="hinge")  #loss="hinge", loss="log"<jupyter_output><empty_output><jupyter_text>解説6：実際の識別器がどの程度の性能を持つのかをK分割交差検証法で検討これはデータをK等分して、そのうち1固まりをテストデータにし、残りのK-1個を学習データにして正答率を検討する手法。K回分の平均をとることで正答率と正答率の標準偏差を求めることが出来る。<jupyter_code>#解説 6：K分割交差検証（cross validation）で性能を評価する---------------------
scores=cross_validation.cross_val_score(clf_result, X_std, z, cv=10)
print("平均正解率 = ", scores.mean())
print("正解率の標準偏差 = ", scores.std())
# 解説 7：トレーニングデータとテストデータに分けて実行してみる------------------
X_train, X_test, train_label, test_label=cross_validation.train_test_split(X_std,z, test_size=0.1, random_state=0)
clf_result.fit(X_train, train_label)

# 正答率を求める
pre=clf_result.predict(X_test)
ac_score=metrics.accuracy_score(test_label,pre)
print("正答率 = ",ac_score)

# plotする
X_train_plot=np.vstack(X_train)
train_label_plot=np.hstack(train_label)
X_test_plot=np.vstack(X_test)
test_label_plot=np.hstack(test_label)

#p lot_decision_regions(X_train_plot, train_label_plot, clf=clf_result, res=0.01)        # 学習データをプロット
plot_decision_regions(X_test_plot, test_label_plot, clf=clf_result, res=0.01, legend=2)  # テストデータをプロット
#解説 8：任意のデータに対する識別結果を見てみる------------------
#predicted_label=clf_result.predict([1,-1])
#print("このテストデータのラベル = ", predicted_label)
#解説 9：識別平面の式を手に入れる--------------------------------
print(clf_result.intercept_)
print(clf_result.coef_ )       # coef[0]*x + coef[1]*y + intercept = 0<jupyter_output>[ -9.31998866 -10.91424585  -3.84711508]
[[ -9.69473758  21.8417196 ]
 [-22.46264536 -11.06530575]
 [ 15.74949076 -12.30251889]]
{'fraction_non_alphanumeric': 0.1998574483250178, 'fraction_numerical': 0.03962936564504633, 'mean_word_length': 4.275187969924812, 'pattern_counts': {'":': 0, '<': 27, '<?xml version=': 0, '>': 36, 'https://': 7, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '131399', 'license': 'MIT', 'n_tokens_mistral': 3593, 'n_tokens_neox': 3438, 'n_words': 335, 'path': 'try_scikit_learn.ipynb', 'repo_name': 'RXV06021/basicPy', 'size': '7015'}