林轩田 机器学习基石 作业3 线性回归 13题 python2.7

林轩田 机器学习基石 作业3 线性回归 13题 python2.7

注意random shuffle 的使用,shuffle洗牌可能洗到重复的
具体问题可查看该链接
所以这里我使用sklearn里面的shuffle,不使用random的shuffle

希望大家能够提建议,谢谢

草稿代码如下

# coding=utf-8
import numpy as np
import random
from sklearn.utils import shuffle

def create_random_data(num=1000,error_rate=0.1):
    data_mat=np.zeros([num,4])##data_mat是一个array类型
    error_num=int(num*error_rate)
    for i in range(num):
        x1=random.uniform(-1,1)
        x2=random.uniform(-1,1)
        label=(1 if (x1**2+x2**2>=0.6) else -1)
        data_mat[i][0]=1
        data_mat[i][1]=x1
        data_mat[i][2]=x2
        data_mat[i][3]=label
    for j in range(error_num):
        data_mat[j][3]=-data_mat[j][3]
        data_mat=shuffle(data_mat)
        # random.shuffle(data_mat)千万小心random shuffle,洗牌之后可能出现重复项
    data_feature=data_mat[:,:3]
    data_lable=data_mat[:,3:]
    return data_feature,data_lable
def train_model(data_feature,data_lable):
    X=np.mat(data_feature)
    y=np.mat(data_lable)
    # w=np.dot(np.dot(np.dot(X.T,X).I,X.T),data_lable)
    w=np.linalg.inv(np.dot(X.T, X)).dot(X.T).dot(y)
    return np.mat(w.T)
def error_rate(w,data_feature,data_lable):
    m,n=np.shape(data_feature)
    num_error=0
    for i in range(m):
        score=np.dot(w,data_feature[i])[0,0]
        if score*data_lable[i,0]<0:
            num_error+=1
    return num_error/float(m)
 #####验证代码
total_rate=0.0
for i in range(1000):
    data_feature, data_lable = create_random_data()
    w=train_model(data_feature,data_lable)
    error=error_rate(w,data_feature,data_lable)
    total_rate+=error
print total_rate/1000.0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值