机器学习之正则化

文中链接:
数据生成
#!/usr/bin/python
"""
    这段代码的主要内容包括选择随机系数生成单变量二次多项式,调整系数,和生成五个有噪音的随机数据点,详细解释见代码。
"""

from numpy import poly1d
from scipy.integrate import quad
from numpy.random import normal
from numpy.random import uniform
import numpy as np
### f(x)=a*x**2 + b*x + c
### 随机系数a,b,c,服从标准正太分布
#cof = normal(size=3)
cof = np.array([1.,-1.,.25])
f = poly1d(cof)
### 调整系数cof,假设输入空间[0,1],并且均匀分布,概率密度P(x)=1
### 调整系数使得f(x)的平方的期望值为1,即Ex[f(x)**2]=1,目的是使得信噪比有意义
g = lambda x: f(x)**2
result,error=quad(g,0,1)
f = poly1d(cof/(result**.5))
result,error=quad(g,0,1)
print result
X = np.linspace(0, 1, 100)
y = f(X)
import matplotlib.pyplot as plt
plt.plot( X,y)
### 生成5个数据点,输出噪音强度为theta
theta=.1
dX = uniform(size=5)
dy = f(dX) + theta*normal(size=5)
plt.scatter(dX, dy, color="r", label="train")
### X变换到Z空间Z={x**0,x**1,x**2,x**3,x**4}
from sklearn.preprocessing import PolynomialFeatures
dX = dX.reshape(5,1)
poly = PolynomialFeatures(6)
dZ = poly.fit_transform(dX)
### 线性拟合
from sklearn import linear_model
clf = linear_model.LinearRegression(fit_intercept=False)
clf.fit(dZ,dy)
plt.plot(X,clf.predict(poly.fit_transform(X.reshape(100,1))))
plt.xlim([0,1.])
plt.ylim([0,1.])
plt.show()
线性回归
#!/usr/bin/python
"""
    这段代码的主要内容包括简单线性拟合和带有正则器的线性拟合,详细解释见代码。
"""
from numpy import poly1d
from scipy.integrate import quad
from numpy.random import normal
from numpy.random import uniform
import numpy as np
cof = np.array([ 8.94427191, -8.94427191,  2.23606798])
f = poly1d(cof)
g = lambda x: f(x)**2
result,error=quad(g,0,1)
print result
X = np.linspace(0, 1, 100)
y = f(X)
import matplotlib.pyplot as plt
plt.plot( X,y,color="b",label="Target")
### 这是由随机样本生成程序的生成5个数据点,噪音强度为theta
theta=.1
dX = np.array([0.24577734,0.64312906,0.79399475,0.64484208,0.15637171])
#dX = uniform(size=5)
dy = np.array([ 0.55952277,  0.16654037,  0.77060361,  0.15839885,  0.84731844])
#dy = f(dX) + theta*normal(size=5)
plt.scatter(dX, dy, color="black", label="Data")
### X变换到Z空间Z={x**0,x**1,x**2,x**3,x**4}
from sklearn.preprocessing import PolynomialFeatures
dX = dX.reshape(5,1)
### 这个决定了假设集多项式的阶数,如果使用三次或者二次请相应的更改
poly = PolynomialFeatures(4)
dZ = poly.fit_transform(dX)
### 线性拟合
from sklearn import linear_model
###这个是简单的线性拟合
#clf = linear_model.LinearRegression(fit_intercept=False)
###这个是有正则器的线性拟合,读者可根据需要自行注解
clf = linear_model.Ridge(alpha = .001,fit_intercept=False)
clf.fit(dZ,dy)
print sum(clf.coef_**2)
plt.plot(X,clf.predict(poly.fit_transform(X.reshape(100,1))),color="r", label="Fit")

plt.xlim([0,1.])
plt.ylim([0,1.])
plt.legend(loc="best")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值