1 2 3 4 5 6 7 8 9 10 |
例1 a = [1, -2, 3, -4, 5] list(filter(lambda x: x>0, aaa)) #xはこの場限りの変数aaaはフィルターしたい文字の入った変数 #変数aaaにある要素の数だけ繰り返す 例2 list(filter(lambda x: x > 1 and x < 7, tuki2)) |
1 2 3 4 5 6 7 8 9 10 |
例1 a = [1, -2, 3, -4, 5] list(filter(lambda x: x>0, aaa)) #xはこの場限りの変数aaaはフィルターしたい文字の入った変数 #変数aaaにある要素の数だけ繰り返す 例2 list(filter(lambda x: x > 1 and x < 7, tuki2)) |
1 |
lambdaで条件分岐をするには |
1 2 |
<span class="cm-variable">a</span> = <span class="cm-keyword">lambda</span> <span class="cm-variable">x</span>: <span class="cm-variable">x</span> <span class="cm-operator">*</span> <span class="cm-number">3</span> <span class="cm-keyword">if</span> <span class="cm-variable">x</span> <span class="cm-operator"><</span> <span class="cm-number">4</span> <span class="cm-keyword">else</span> <span class="cm-variable">x</span><span class="cm-operator">/</span><span class="cm-number">2</span> <span class="cm-operator">+</span> <span class="cm-number">7</span> |
lambda x(引数) : 条件を満たすときの処理 if x < 4 else x/2 + 7
1 |
x = lambda a: a ** 2 - 40 * a + 350 if a >= 10 and a < 30 else 50 |
#returnはいらない
re.split を使い複数の記号を指定して分割する
1 |
<span class="cm-variable">切り分けたい文字列</span>.<span class="cm-property">split</span>(<span class="cm-string">"区切る記号"</span>, <span class="cm-variable">区切る回数</span>) |
例:
re.split(“[/ _ :]”
import re
time_data = "2020/11/25_23:00"
# time_dataを切り分け。
time = re.split("[/ _ :]",time_data)
# "月"と"時"の部分を出力
print(time[1])
print(time[3])
例:
[/_:]を取り出す関数
import re
time_list = [
"2006/11/26_2:40",
"2009/1/16_23:35",
"2014/5/4_14:26",
"2017/8/9_7:5",
"2017/4/1_22:15"
]
# 文字列から"時"を取り出す関数を作成(これはgetに関数を入れるので数値が入るのではない)
get = lambda x: int(re.split("[/_:]",x)[1])
#変数xが引数、[1]が月を取得する目的
1 |
<span class="cm-builtin">map</span>(<span class="cm-variable">適用したい関数</span>, <span class="cm-variable">配列</span>) |
hour_list = list(map(get, time_list))
#map()でforのようにtime_listの数だけ繰り替えし、上記で設定したget関数を
#各リストに対し行い、list関数によってリストを再構築(print list("ABC") # ["A", "B", "C"])
print (hour_list) #>>>[11,1,5,8,9]になる
リスト内包表記
1 |
[<span class="cm-variable">関数</span>(<span class="cm-variable">要素</span>) <span class="cm-keyword">for</span> <span class="cm-variable">要素</span> <span class="cm-keyword">in</span> <span class="cm-variable">配列の変数</span>] |
1 2 |
[<span class="cm-builtin">abs</span>(<span class="cm-variable">x</span>) <span class="cm-keyword">for</span> <span class="cm-variable">x</span> <span class="cm-keyword">in</span> <span class="cm-variable">a</span>] |
1 2 3 4 |
>Out: [1, 2, 3, 4, 5] イテレータ用にmap、 |
1 |
直接配列用にスト内包表記を使用する |
defの定義が不要
(lambda x, y,z: x + y * z)(3, 5,400)
これを実行すれば計算結果2003がでるprintは不要
混同行列とは以下の4種類
「真か偽」は結果がポジティブかネガティブか
「陽性か陰性」は予想自体が元々ポジティブかネガティブか
「真」は結果がポジティブとなった
「偽」は結果がネガティブとなった
「陽性」は予想自体が元々ポジティブだった
「陰性」は予想自体が元々ネガティブだった
例:1
「医者がエイズであると予測したが実際はエイズではなかった」という場合は
予想の結果は医者の診断に対してネガティブなので「偽」となり、
医者は患者をエイズだ「陽性(ポジティブ)」だと元々予想していたため
このケースでは「偽陽性」となる
「エイズと言われエイズだった」場合は真陽性
「エイズと言われエイズで無かった」場合は偽陽性
「エイズではないと言われエイズで無かった」場合は偽陰性
「エイズではないと言われエイズだった」場合は真陰性
例:2
「友人から結婚は無理と言われて本当に結婚できなかった」場合は
結果は結婚ができなかったので予測は当たりでポジティブ「真」であり
友人の元々の予想は結婚できないと言われネガティブ「陰性」である為
このケースでは「偽陰性」となる
「結婚できると言われ結婚できた」場合は真陽性
「結婚できると言われてたが結婚できなかった」場合は偽陽性
「結婚できないと言われ結婚できなかった」場合は偽陰性
「結婚できないと言われ結婚できた」場合は真陰性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
print(__doc__) import itertools import numpy as np import matplotlib.pyplot as plt from sklearn import svm, datasets from sklearn.model_selection import train_test_split from sklearn.metrics import confusion_matrix # import some data to play with iris = datasets.load_iris() X = iris.data y = iris.target class_names = iris.target_names # Split the data into a training set and a test set X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) # Run classifier, using a model that is too regularized (C too low) to see # the impact on the results classifier = svm.SVC(kernel='linear', C=0.01) y_pred = classifier.fit(X_train, y_train).predict(X_test) def plot_confusion_matrix(cm, classes, normalize=False, title='Confusion matrix', cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ if normalize: cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis] print("Normalized confusion matrix") else: print('Confusion matrix, without normalization') print(cm) plt.imshow(cm, interpolation='nearest', cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) fmt = '.2f' if normalize else 'd' thresh = cm.max() / 2. for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])): plt.text(j, i, format(cm[i, j], fmt), horizontalalignment="center", color="white" if cm[i, j] > thresh else "black") plt.tight_layout() plt.ylabel('True label') plt.xlabel('Predicted label') # Compute confusion matrix cnf_matrix = confusion_matrix(y_test, y_pred) np.set_printoptions(precision=2) # Plot non-normalized confusion matrix plt.figure() plot_confusion_matrix(cnf_matrix, classes=class_names, title='Confusion matrix, without normalization') # Plot normalized confusion matrix plt.figure() plot_confusion_matrix(cnf_matrix, classes=class_names, normalize=True, title='Normalized confusion matrix') plt.show() |
k分割交差検証には、「一個抜き」(Leave-One-Out:LOO)交差検証という方法があり
k分割交差検証から分割の数をデータセットの数と同じにしたもの
(k=データの個数)
小さいデータを使用する場合に使われる