日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

吴恩达机器学习作业(4):正则化逻辑回归

發(fā)布時(shí)間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 吴恩达机器学习作业(4):正则化逻辑回归 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1)數(shù)據(jù)可視化

2)創(chuàng)建多項(xiàng)式特征

3)正則化成本函數(shù)

4)正則化梯度下降

4)準(zhǔn)確度

5)Scikit-learn實(shí)現(xiàn)


正則化是成本函數(shù)中的一個(gè)術(shù)語,它使算法更傾向于“更簡單”的模型(在這種情況下,模型將有更小的系數(shù))。這個(gè)理論有助于減少過擬合,提高模型的泛化能力。這樣,我們開始吧。

設(shè)想你是工廠的生產(chǎn)主管,你有一些芯片在兩次測試中的測試結(jié)果。對(duì)于這兩次測試,你想決定是否芯片要被接受或拋棄。為了幫助你做出艱難的決定,你擁有過去芯片的測試數(shù)據(jù)集,從其中你可以構(gòu)建一個(gè)邏輯回歸模型。

和第一部分很像,從數(shù)據(jù)可視化開始吧!

1)數(shù)據(jù)可視化

我們這里使用之前導(dǎo)入過的庫:

path = 'ex2data2.txt' data2 = pd.read_csv(path, header=None, names=['Test 1', 'Test 2', 'Accepted']) data2.head()positive = data2[data2['Accepted'].isin([1])] negative = data2[data2['Accepted'].isin([0])]fig, ax = plt.subplots(figsize=(12,8)) ax.scatter(positive['Test 1'], positive['Test 2'], s=50, c='b', marker='o', label='Accepted') ax.scatter(negative['Test 1'], negative['Test 2'], s=50, c='r', marker='x', label='Rejected') ax.legend() ax.set_xlabel('Test 1 Score') ax.set_ylabel('Test 2 Score') plt.show()

這個(gè)數(shù)據(jù)看起來可比前一次的復(fù)雜得多。特別地,你會(huì)注意到其中沒有線性決策界限,來良好的分開兩類數(shù)據(jù)。一個(gè)方法是用像邏輯回歸這樣的線性技術(shù)來構(gòu)造從原始特征的多項(xiàng)式中得到的特征。讓我們通過創(chuàng)建一組多項(xiàng)式特征入手吧。

2)創(chuàng)建多項(xiàng)式特征

degree = 5 x1 = data2['Test 1'] x2 = data2['Test 2']data2.insert(3, 'Ones', 1)for i in range(1, degree):for j in range(0, i):data2['F' + str(i) + str(j)] = np.power(x1, i-j) * np.power(x2, j)data2.drop('Test 1', axis=1, inplace=True) data2.drop('Test 2', axis=1, inplace=True)data2.head()

3)正則化成本函數(shù)

def costReg(theta, X, y, learningRate):theta = np.matrix(theta)X = np.matrix(X)y = np.matrix(y)first = np.multiply(-y, np.log(sigmoid(X * theta.T)))second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T)))reg = (learningRate / (2 * len(X))) * np.sum(np.power(theta[:,1:theta.shape[1]], 2))return np.sum(first - second) / len(X) + reg

4)正則化梯度下降

現(xiàn)在我們來看看正則化的代價(jià)函數(shù),只是第一項(xiàng)未正則化:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

對(duì)上面的算法中 j=1,2,...,n 時(shí)的更新式子進(jìn)行調(diào)整可得:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

def gradientReg(theta, X, y, learningRate):theta = np.matrix(theta)X = np.matrix(X)y = np.matrix(y)parameters = int(theta.ravel().shape[1])grad = np.zeros(parameters)error = sigmoid(X * theta.T) - yfor i in range(parameters):term = np.multiply(error, X[:,i])if (i == 0):grad[i] = np.sum(term) / len(X)else:grad[i] = (np.sum(term) / len(X)) + ((learningRate / len(X)) * theta[:,i])return grad

4)準(zhǔn)確度

剩下的操作就像之前一樣:

# set X and y (remember from above that we moved the label to column 0) cols = data2.shape[1] X2 = data2.iloc[:,1:cols] y2 = data2.iloc[:,0:1]# convert to numpy arrays and initalize the parameter array theta X2 = np.array(X2.values) y2 = np.array(y2.values) theta2 = np.zeros(11)learningRate = 1

現(xiàn)在,我們來計(jì)算新的默認(rèn)為0的正則化函數(shù)的值:

costReg(theta2, X2, y2, learningRate)0.6931471805599454gradientReg(theta2, X2, y2, learningRate)array([0.00847458, 0.01878809, 0.05034464, 0.01150133, 0.01835599,0.00732393, 0.00819244, 0.03934862, 0.00223924, 0.01286005,0.00309594])

現(xiàn)在我們可以使用和第一部分相同的優(yōu)化函數(shù)來計(jì)算優(yōu)化后的結(jié)果。

result2 = opt.fmin_tnc(func=costReg, x0=theta2, fprime=gradientReg, args=(X2, y2, learningRate)) result2 (array([ 1.22702519e-04, 7.19894617e-05, -3.74156201e-04,-1.44256427e-04, 2.93165088e-05, -5.64160786e-05,-1.02826485e-04, -2.83150432e-04, 6.47297947e-07,-1.99697568e-04, -1.68479583e-05]), 96, 1)

最后,我們可以使用第1部分中的預(yù)測函數(shù)來查看我們的方案在訓(xùn)練數(shù)據(jù)上的準(zhǔn)確度。

theta_min = np.matrix(result2[0]) predictions = predict(theta_min, X2) correct = [1 if ((a == 1 and b == 1) or (a == 0 and b == 0)) else 0 for (a, b) in zip(predictions, y2)] accuracy = (sum(map(int, correct)) % len(correct)) print ('accuracy = {0}%'.format(accuracy))

5)Scikit-learn實(shí)現(xiàn)

from sklearn import linear_model#調(diào)用sklearn的線性回歸包 model = linear_model.LogisticRegression(penalty='l2', C=1.0) model.fit(X2, y2.ravel())model.score(X2, y2) 0.6610169491525424

這個(gè)準(zhǔn)確度和我們剛剛實(shí)現(xiàn)的差了好多,不過請(qǐng)記住這個(gè)結(jié)果是使用默認(rèn)參數(shù)下計(jì)算的結(jié)果。我們可能需要做一些參數(shù)的調(diào)整來獲得和我們之前結(jié)果相同的精確度。

總結(jié)

以上是生活随笔為你收集整理的吴恩达机器学习作业(4):正则化逻辑回归的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。