您的位置:首页 > 编程语言 > Python开发

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

2018-09-27 10:43 375 查看
版权声明:转载务必说明出处 https://blog.csdn.net/m0_37534550/article/details/82863747

林轩田 机器学习基石 作业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
2323a
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
[/code] 阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: