西瓜书——线性模型

本章内容来源于西瓜书第三章的课后题,序号是3.3,关于西瓜书的答案,网上已经有了不少,我自己也是先按照网上西瓜书的答案进行的学习,但是后面发现网上的答案没有很好的利用书中的知识,所以自己按照书中内容,重新做了下

数据介绍

我们先介绍数据,数据如下,可以直接复制拿去用
[[ 1. , 0.697 , 0.46 , 1. ],
[ 2. , 0.774 , 0.376 , 1. ],
[ 3. , 0.634 , 0.264 , 1. ],
[ 4. , 0.608 , 0.318 , 1. ],
[ 5. , 0.556 , 0.215 , 1. ],
[ 6. , 0.403 , 0.237 , 1. ],
[ 7. , 0.481 , 0.149 , 1. ],
[ 8. , 0.437 , 0.211 , 1. ],
[ 9. , 0.666 , 0.091 , 0. ],
[10. , 0.243 , 0.0267, 0. ],
[11. , 0.245 , 0.057 , 0. ],
[12. , 0.343 , 0.099 , 0. ],
[13. , 0.639 , 0.161 , 0. ],
[14. , 0.657 , 0.198 , 0. ],
[15. , 0.36 , 0.37 , 0. ],
[16. , 0.593 , 0.042 , 0. ],
[17. , 0.719 , 0.103 , 0. ]]

代码实现

import numpy as np
from sklearn import model_selection
from sklearn import metrics
def gradDscent_2(x,y):
    max_time=500
    m,n=np.shape(x)
    beta=np.zeros(n)
    h=0.1
    delta=np.zeros(n)
    for i in range(max_time):
        beta+=delta
        delta=derivative(x,y,beta)*-h
    return beta
def derivative(x,y,beta):
    delta_l=0
    m,n=np.shape(x)
    for i in range(m):
        delta_l+=np.dot(x[i].T,(1-y[i]-(1/(1+np.math.exp(np.dot(x[i].T,beta))))))
    return delta_l
def sigmoid(x,beta):
    return 1.0/(1+np.math.exp(-1*np.dot(beta,x.T)))
def predict(x,beta):
    m,n=np.shape(x)
    y=np.zeros(m)
    for i in range(m):
        if(sigmoid(x[i],beta)>0.5):
            y[i]=1
    return y
dataset=[[ 1.    ,  0.697 ,  0.46  ,  1.    ],
       [ 2.    ,  0.774 ,  0.376 ,  1.    ],
       [ 3.    ,  0.634 ,  0.264 ,  1.    ],
       [ 4.    ,  0.608 ,  0.318 ,  1.    ],
       [ 5.    ,  0.556 ,  0.215 ,  1.    ],
       [ 6.    ,  0.403 ,  0.237 ,  1.    ],
       [ 7.    ,  0.481 ,  0.149 ,  1.    ],
       [ 8.    ,  0.437 ,  0.211 ,  1.    ],
       [ 9.    ,  0.666 ,  0.091 ,  0.    ],
       [10.    ,  0.243 ,  0.0267,  0.    ],
       [11.    ,  0.245 ,  0.057 ,  0.    ],
       [12.    ,  0.343 ,  0.099 ,  0.    ],
       [13.    ,  0.639 ,  0.161 ,  0.    ],
       [14.    ,  0.657 ,  0.198 ,  0.    ],
       [15.    ,  0.36  ,  0.37  ,  0.    ],
       [16.    ,  0.593 ,  0.042 ,  0.    ],
       [17.    ,  0.719 ,  0.103 ,  0.    ]]
dataset=np.array(dataset)
print(type(dataset))
x=dataset[:,1:3]
y=dataset[:,3]
x_train,x_test,y_train,y_test=model_selection.train_test_split(x,y,test_size=0.6,random_state=0)
beta=gradDscent_2(x_train,y_train)
pred=predict(x_test,beta)
print(metrics.confusion_matrix(y_test,pred))
print(metrics.classification_report(y_test,pred))

结果与网上答案一致,使用的公式是p60,3.30

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值