参考文献:https://blog.csdn.net/Cowry5/article/details/80367832
1つの インポートNPとしてnumpyの 2頭の インポートPDとしてパンダ 3 インポートPLTとしてmatplotlib.pyplot 4 から scipy.io インポートloadmat 5 から scipy.optimize インポートは最小限 6 デフLOAD_DATA(パス): 7件の データ= loadmat(パス) 8 X =データ[ ' X ' ] 9 Y =データ[ ' Y ' ] 10 #プリント(型(X)、タイプ(Y)) 11 リターンX、Y 12パス= R ' :C \ユーザーは、地球\デスクトップ\コーセラ-ML-使用-MATLAB-Pythonのマスタ\の機械学習-EX3 \ EX3 \ ex3data1.mat \ ' 13、X、Y = LOAD_DATA(経路) 14 プリント(NPを.unique(Y)) 15 プリント(X.shape、y.shape) 16 プリント(LEN(X)) 17 18 DEF plotanimage(): 19 pick_one = np.random.randint(0,5000 ) 20 画像= X [ pick_one ,:] 21 #选择pick_one这一行的所有列 22 図、AX = plt.subplots(figsize =(1,1 )) 23 ax.matshow(image.reshape((20,20))、CMAP = 'gray_r ' ) 24 plt.xticks([]) 25 plt.yticks([]) 26 plt.show() 27 プリント(' これはあるべきである{} ' .format(Y [pick_one])) 28 29 #plotanimage() 30 デフシグモイド(Z): 31 リターン 1 /(1 + np.exp( - Z)) 32 33 DEF costReg(シータ、X、Y、LAM): 34 第一= np.mean(-y * np.log(シグモイド(X @シータ)) - (1-Y)* np.log(1- シグモイド(X @シータ))) 35の theta1 =シータ[1 :] 36 second=theta1.T@theta1*lam/(2 * (X-)LEN) 37 [ #ここで第二の必要性がスカラー行列ではない、θ1を単独で乗算される転置すると、すべての対応する要素を与えることができ正方形及びθ1*が得られるθ1である場合、ベクトル 38は、 戻りまず+ SECOND 39 DEFの勾配(シータ、X、Y、ラム): 40 第一=(XTの@(シグモイド(X- @シータ)-Y))/ LEN (X-) 41である Theta1シータ= [1 :] 42である =([np.array([0])、ラムTheta1 * /秒np.concatenate LEN(X-)]) 43が 戻りまず+ SECOND 44れる DEF 、(X、Yをone_vs_all LAM、K): 45 all_thetaのnp.zeros =([1(K、X.shape ])) 46である ため、I中範囲(1、K + 1 ): 47 シータ= np.zeros(X.shape [1 ]) 48 Y_I = np.array([1 なら == Iラベル他 0 のためのラベルでY]) 49 RETは=最小(FUN = costReg、X0 =シータ、引数=(X、Y_I、LAM)、メソッド= ' TNC '、JAC =勾配、オプションは= { ' DISP ' :真}) 50 all_theta [I-1:] = RET .X 51 #序列为I-1的行、所有列替换成ret.x 52 リターンall_theta 53 DEF predict_all(X、all_theta): 54 H = シグモイド(X@all_theta.T) 55 h_argmax = np.argmax(H、軸= 1 ) 56 h_argmax = h_argmax + 1枚の 57 プリント(' ARGMAXのタイプが' 、タイプ(h_argmax)) 58 プリント(' ARGMAXの形状である'h_argmax.shape) 59 リターンh_argmax 60 raw_X、raw_y = LOAD_DATA(経路) 61 X = np.insert(raw_X、0,1、軸= 1 ) 62 プリント(' Xの形状です' 、 X.shape) 63 # raw_Xは0行に挿入されると、それは列の挿入である、1を挿入するために、挿入される値は、軸=次元を0番目の行または列オブジェクトの前に挿入される物体0を変更する 64 = Y raw_y.flatten() 65 印刷(' IS Yの形' 、y.shape) 66 all_theta one_vs_all =(X、Y、1,10 ) 67 印刷(' すべてのシータの形状はIS ' 、all_theta.shape) 68 =結果predict_all(X-は、all_theta) 69 プリント(result.shape) 70 DEF cal_accuracy(結果、Y): 71は、 RES = [1。IF結果[I] == Y [I] 他 0 用 I で範囲(LEN(Y))] 72 リターンnp.mean(RES) 73 プリント(結果== Y) 74 #プリント(cal_accuracy(その結果、Y)) 75 #theta2 = np.zeros((10、X.shape [ 1])) 76 #theta2 = theta2 [1:] 77 #プリント(theta2.shape) 78 #1 のT =(theta2する@ theta2)/(2 * LEN(X)) 79の #1 プリント(t.shape) 80 #T1 = theta2 * theta2 81 #のプリント(t1.shape)
アイデアの概要:
図1は、まず、X、Yに指定されたデータから読み出され、初期化に応じてθを必要とします
図2に示すように、正規化された最初のペナルティコスト関数は、θはないことに留意すべきであり、書き込み機能と費用関数を想定0、θが処理を変化させることが必要です
図3は、式に従って勾配関数を書きます
図4は、マルチ分類問題は、各クラスに応じて最適化され、そしてθに割り当てられ、最終的に値、中央を達成するためのサイクルのために使用することができることに注意することは、高度なアルゴリズムを用いて最適化することがθ
5、良いトレーニングθ後の世代がその機能を想定し、マルチ分類問題のために、最大値は予測カテゴリの確率だと思います
図6に示すように、統計処理の結果、および実際の値、計算精度率を予測します
いくつかの一般的に使用されるスライシング、次元削減や他の操作を含め、十分に印象的ではないnumpyの把握で発見機能、練習の過程でより多くの奇妙なこの1の描画に加えて、ギャップに対処する必要性
あなたは行列の乗算の式を適用すると、誰と誰が掛けため、対応時々移調する必要性は、しかし、最善の方法は、その形状行列乗算特性に応じて動作させるためにプレーすることです。