# BAT面试题5：关于LR

BAT面试题5：关于LR

Step1 生成模拟的数据集

``` 1      w1               w2          y
2array([[ 0.78863156,  0.45879449,  1.        ],
3
4       [ 0.70291388,  0.03437041,  1.        ],
5
6       [ 0.89775764,  0.24842968,  1.        ],
7
8       [ 0.92674416,  0.13579184,  1.        ],
9
10       [ 0.80332783,  0.71211063,  1.        ],
11
12       [ 0.7208047 ,  0.48432214,  1.        ],
13
14       [ 0.8523947 ,  0.06768344,  1.        ],
15
16       [ 0.49226351,  0.24969169,  1.        ],
17
18       [ 0.85094261,  0.79031018,  1.        ],
19
20       [ 0.76426901,  0.07703571,  1.        ]])```

Step2 梯度下降求权重参数

```1'model' 建立的逻辑回归模型：包括Sigmoid映射
2
3'cost' 代价函数
4
6
7'theta update'  参数更新公式
8
9'stop stratege'  迭代停止策略：代价函数小于阈值法```

```  1'偏移量 b shape=(200,1)'
2
3b = np.ones(200)
4
5'将偏移量与2个特征值组合 shape = (200,3)'
6
7X = np.hstack((b,X))
8
9'model'
10
11def sigmoid(x):
12
13    return 1/(1+ np.exp(-x))
14
15def model(theta,X):
16
17    theta = np.array(theta)
18
19    return sigmoid( X.dot(theta) )
20
21'cost'
22
23def cost(m,theta,X,y):
24
25    ele = y*np.log(model(theta,X)) + (1-y)*np.log(1-model(theta,X))
26
27    item_sum = np.sum(ele)
28
29    return -item_sum/m
30
32
33
34
35
37
39
40    for j in range(cols):
41
42        grad = (model(theta,X) - y).dot(X[:,j])
43
45
47
49
50'theta update'
51
53
54    return theta - sigma * grad_theta
55
56'stop stratege'
57
58def stop_stratege(cost,cost_update,threshold):
59
60    return cost-cost_update < threshold
61
62'逻辑回归算法'
63
64
65def LogicRegression(X,y,threshold,m,xcols):
66
67    start = time.clock()
68
69    '设置权重参数的初始值'
70
71    theta = np.zeros(xcols)
72
73    '迭代步数'
74
75    iters = 0;
76
77    '记录代价函数的值'
78
79    cost_record=[]
80
81    '学习率'
82
83    sigma = 0.01
84
85    cost_val = cost(m,theta,X,y)
86
87    cost_record.append(cost_val)
88
89    while True:
90
92
93        '参数更新'
94
96
97        cost_update = cost(m,theta,X,y)
98
99        if stop_stratege(cost_val,cost_update,threshold):
100
101            break
102
103        iters=iters+1
104
105        cost_val = cost_update
106
107        print("cost_val:%f" %cost_val)
108
109        cost_record.append(cost_val)
110
111    end = time.clock()
112
113    print("LogicRegressionconvergence duration: %f s" % (end - start))
114
115    return cost_record, iters,theta```

3 分析结果

`1array([ 0.48528656,  9.48593954, -9.42256868])  `

```1plt.scatter(x1_pos,x2_pos)
2
3plt.scatter(x1_neg,x2_neg)
4
5wp = np.linspace(0.0,1.0,200)
6
7plt.plot(wp,-(theta[0]+theta[1]*wp)/theta[2],color='g')
8
9plt.show()```

298 篇文章90 人订阅

0 条评论

## 相关文章

4218

1333

2210

### 【干货】随机森林的Python实现

【新智元导读】在机器学习中，随机森林是一个包含多个决策树的分类器，并且其输出的类别是由个别树输出的类别的众数而定。随机森林几乎是任何预测类问题（甚至非线性问题）...

3725

### [编程经验] TensorFlow实现线性支持向量机SVM

[点击蓝字，一键关注~] 今天要说的是线性可分情况下的支持向量机的实现，如果对于平面内的点，支持向量机的目的是找到一条直线，把训练样本分开，使得直线到两个样本的...

3884

2509

### 从0上手Kaggle图像分类挑战：冠军解决方案详解

【新智元导读】这篇文章介绍了作者在Kaggle植物幼苗分类比赛使用的方法，该方法连续几个月排名第一，最终排名第五。该方法非常通用，也可以用于其他图像识别任务。

1970

35610