Regularized Logistic Regression(吴恩达课程Octave代码用python实现)

详细代码参考github

Regularized Logistic Regression

实例:
建立Regularized Logistic Regression模型,预测微型集成芯片能否通过质量保证(QA)。我们有芯片两次不同的测试结果,要通过建立的模型预测处理器是否能够通过QA。

1.可视化数据

数据为118组芯片两次测试情况以及测试的结果,维度为(118,3)结果为1,通过,用“+”表示,否则不通过, 用“·”表示,从图中可以看出,无法用一条直线将两种结果区分开来,普通的逻辑回归无法解决该问题。

可视化

参考代码:

def plotData(self):
    y1_index = np.where(self.y == 1.0)
    x1 = self.x[y1_index[0]]
    y0_index = np.where(self.y == 0.0)
    x0 = self.x[y0_index[0]]
    plt.scatter(x1[:, 0], x1[:, 1], marker='+', color='k')
    plt.scatter(x0[:, 0], x0[:, 1], color='y')
    plt.legend(['y = 1', 'y = 0'])
    plt.xlabel('Microchip Test 1')
    plt.ylabel('Microchip Test 2')
    # plt.show()
2.Feature mapping

通过数据分布,单纯的一条直线解决不了问题,我们尝试用两种测试结果的多项式形式来处理,最高6次幂,这样边界将是一条曲线,如果多项式的最高次幂太高的话,容易过拟合,太低的话容易欠拟合,通过mapFeature函数,将2组特征数据,转换为28组特征数据,其中第一组数据是1,其余数据按照下式生成。

mapFeature

参考代码:

def mapFeature(self, x1, x2):
       # 生成多项式
       out = np.ones((x1.shape[0], 1))
       for i in range(6):
           for j in range(i+2):
               out = np.hstack([out, (x1**(i+1-j)*(x2**j))])
       return out
3.损失函数和梯度

同普通的逻辑回归一样,只不过多了一部分正则化项,公式如下,容易忽略的地方,参数theta0是不需要正则化的,故下标是从1开始。

costJ

损失函数的梯度公式,分为两部分,同样theta0不需要正则化。
Gradient

参考代码:

def costFunctionReg(self, theta, lanmda):
       m = self.y.shape[0]
       J = (-np.dot(self.y.T, np.log(self.sigmoid(self.map_x.dot(theta))))-np.dot((1-self.y).T, np.log(1-self.sigmoid(self.map_x.dot(theta))))) / m+ (lanmda*np.sum(theta[1::]**2, axis=0))/(2*m)  # 正则化从j = 1开始
       return J

def gradient(self, theta, lanmd):
       m = self.y.shape[0]
       theta = theta.reshape((self.map_x.shape[1], 1))
       grad = np.zeros((self.map_x.shape[1], 1))
       grad[0] = np.dot(self.map_x[:, 0:1].T, (self.sigmoid(self.map_x.dot(theta))-self.y)) / m
       grad[1::] = np.dot(self.map_x[:, 1::].T, (self.sigmoid(self.map_x.dot(theta))-self.y)) / m + lanmd*theta[1::] / m
       # grad = np.dot(self.map_x.T, (self.sigmoid(self.map_x.dot(theta)) - self.y)) / m
       return grad
4.求解最优的theta

同样使用scipy.optimize中的minimize函数,注意参数的数量,在梯度和损失函数定义的两个函数中,传入参数为2个,故minimize函数使用args=()参数
参考代码:

def fminunc(self):  # costFunction需要几个参数就传几个,本例有两个,x0,利用args=(100, )
    optiTheta = op.minimize(fun=self.costFunctionReg, x0=np.zeros((28, )), args=(100, ), method='TNC', jac=self.gradient)
        return optiTheta  # dict

这里出现一个问题:当设置lambda值为0.1、1、10、100时均可求出最优theta,但当lambda=0时,始终返回failure,找不到最优解,有大神看到还请帮忙解答。

5.绘制决策边界

按照设置的lambda值,生成了四个结果。原试验中还有lambda=0的情况,但上面求解函数中求不到值,把原octave试验结果贴出来,放在一起便于分析。
清楚的看出来,当lambda较小的时候,边界可以将训练数据很好的分开,但是边界非常复杂,明显的过拟合;当lamda=100的时候,得到了偏移很多的决策边界,没能很好的区分,欠拟合,找到较为的合适的lambda值,是求得较好结果的关键。

lambda = 0

lambda = 0.1
lambda = 1

lambda = 10

lambda = 100

5.lambda值

贴出吴老师用手注灵魂的PPT,当lambda很大很大的时候,要最小化J,所有的theta就会很小很小,约等于0,那么求出来的h(theta)函数就近似一条直线,结果欠拟合;lambda很小的时候,正则化项几乎不起作用,不能很好的处理过拟合。

lambda值

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容