NPとして1つのインポートnumpyの PDとして2インポートパンダ PLTとして3インポートmatplotlib.pyplot scipy.ioインポートloadmatから4 最小限scipy.optimizeインポートから5 6デフLOAD_DATAを(パス): 7件のデータ= loadmat(パス) 8 X =データ[ 'X'] 9 Y =データ[ 'Y'] 10#プリント(型(X)、タイプ(Y)) 11リターンX、Y 12パス= R'C:\ユーザーは、地球\デスクトップ\コーセラ-ML-を\ \機械学習-EX3-MATLAB-パイソンマスター使用\の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プリント( 'これは{}であるべきである'形式(Y [PICK_ONE])) 28 29#1 plotanimage() 30シグモイドDEF(Z): 31がリターンである1 /(1+ np.exp(-Z)) 32 :33 DEF costReg(シータ、X、Y、ラム)である (1-Y)* - 34 np.meanある=最初の(-Y * np.log(シグモイド(@ X-θ)) np.log(1-シグモイド(@ X-θ))) 35 Theta1シータ= [1:] 36 second=theta1.T@theta1*lam/(2 * LEN(X-)) 37位第二ここで必要得スカラー行列は、θ1*θ1がベクトル得られた場合、それ自体で1は、すべての対応する要素の二乗を乗算することによって得ることができる]シータを転置ない +最初の38のリターンを第2 39 DEF勾配(シータ、X、Y、LAM): 40第一=(XTの@(シグモイド(X @シータ)-y))/ LEN(X) 41のtheta1 =シータ[1:] 42秒= np.concatenate( [np.array([0])、LAM * theta1 / LEN(X)]) 43リターン第二+ 44 DEF(X、Y、LAM、K)one_vs_all: 45 all_theta = np.zeros((K、Xを。 [1]))形状 :範囲(1、K + 1)のI 46を 47シータ= np.zeros(X.shape [1]) 他I 0 ==ラベル場合48 Y_I = np.array([1 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 all_theta 52リターン 53はデフpredict_all(X、all_theta)。 H 54 =シグモイド(X@all_theta.T) 55 h_argmax = np.argmax(H、軸= 1) + = H_argmax 1 h_argmax 56は、 57プリント( 'ARGMAXのタイプが'、タイプ(h_argmax))であり、 58プリント( 'ARGMAXの形状はIS'、h_argmax.shape) 59リターンh_argmax 60 raw_X、raw_y = LOAD_DATA(経路) 61であります= np.insert X-(raw_X、0,1、軸= 1) 62は、プリント( 'X-ISの形'、X.shape)で 63オブジェクト0は最初の行または列0の前に挿入されるように、変更する#raw_Xオブジェクトであります行0が挿入された場合、値が列に挿入され、軸= 1つの寸法が挿入されるように、挿入される 64 raw_y.flatten Y =() 65プリント(「がYの形」、Y .shape) 66 all_theta one_vs_all =(X、Y、1,10)が 67印刷( 'すべてのシータの形状は'、all_theta.shape) 68 predict_all結果は=(X-、all_theta) 69印刷(result.shape) 72リターンnp.mean(RES) 70 DEF cal_accuracy(結果、Y): 71のRES = [1もたらす場合[I] == Y [i]は他0 Iの範囲内(LEN(Y))のために] 73プリント(結果== Y) 74#プリント(cal_accuracy(その結果、Y)) 75#theta2 = np.zeros((10、X.shape [1])) 76#theta2 = theta2 [1:] 77#印刷(theta2.shape) 78#T =(theta2する@ theta2)/(2 * LEN(X)) 79位プリント(t.shape) 80#T1 = theta2 * theta2 81#プリント(t1.shape)
アイデアの概要:
図1は、まず、X、Yに指定されたデータから読み出され、初期化に応じてθを必要とします
図2に示すように、正規化された最初のペナルティコスト関数は、θはないことに留意すべきであり、書き込み機能と費用関数を想定0、θが処理を変化させることが必要です
図3は、式に従って勾配関数を書きます
図4は、マルチ分類問題は、各クラスに応じて最適化され、そしてθに割り当てられ、最終的に値、中央を達成するためのサイクルのために使用することができることに注意することは、高度なアルゴリズムを用いて最適化することがθ
5、良いトレーニングθ後の世代がその機能を想定し、マルチ分類問題のために、最大値は予測カテゴリの確率だと思います
図6に示すように、統計処理の結果、および実際の値、計算精度率を予測します
いくつかの一般的に使用されるスライシング、次元削減や他の操作を含め、十分に印象的ではないnumpyの把握で発見機能、練習の過程でより多くの奇妙なこの1の描画に加えて、ギャップに対処する必要性
あなたは行列の乗算の式を適用すると、誰と誰が掛けため、対応時々移調する必要性は、しかし、最善の方法は、その形状行列乗算特性に応じて動作させるためにプレーすることです。