林轩田 机器学习基石 作业4 岭回归(Regularization for linear regression) 15题 python2.7
其余几个涉及到代码的题目基本一样,这里就不在给出代码来了
同时在《机器学习实战》这本书中也有关于岭回归的代码,大家可以参考一下
训练集来自
https://www.csie.ntu.edu.tw/~htlin/mooc/datasets/mlfound_algo/hw4_train.dat
测试集来自
https://www.csie.ntu.edu.tw/~htlin/mooc/datasets/mlfound_algo/hw4_test.dat
在第17题中利用训练集validation验证的到了一个g*,和一个最佳的lambda
再利用整个训练集,用之前获得的最佳的lambda为参数,对整个训练集进行训练才能得到最佳的g。
希望大家能够提建议,谢谢
草稿代码如下
# coding=utf-8
from numpy import *
import pandas as np
def loadData(FileName):
label=[]
data=[]
file=open(FileName)
for line in file.readlines():
line=line.strip()
curLine=line.split(' ')
curLine=map(float,curLine)
label.append(curLine[-1])
curLine[-1]=1
data.append(curLine)
return array(data),array(label)
# print loadData('hw4_train.txt')
##直接使用ridge regression回归公式进行Wreg的求解
def ridge_regression(X,label,LAMBDA=10):
m,n=shape(X)
temp=dot(X.T,X)+LAMBDA*eye(n, dtype=int)
#注意array是没有.I逆矩阵,所以需要转换成mat,而temp.I会报错
temp=mat(temp).I
temp=dot(temp,X.T)
Wreg=temp.dot(label)
return array(Wreg)[0]
def test_error(W,feature,label):
m=shape(feature)[0]
error_count=0
for i in range(m):
predict=dot(w,feature[i])
if predict>0:
predict=1
else:
predict=-1
if predict!=label[i]:
error_count+=1
return float(error_count)/m
feature,label=loadData('hw4_train.txt')
test_feature,test_label=loadData('hw4_test.txt')
lambda_set=[i for i in range(2,-11,-1)]
best_Eout=100
best_Ein=100
best_lambda=0
for i in lambda_set:
w=ridge_regression(feature,label,pow(10,i))
Eout=test_error(w,test_feature,test_label)
Ein=test_error(w,feature,label)
if Eout<best_Eout:
best_Ein=Ein
best_Eout=Eout
best_lambda=i
print best_lambda,best_Ein,best_Eout