The Elements of Statistical Learning 第五章figure5-8python绘图 (修改版)

这里的数据不是来自5-8的数据,需要大家根据书中的进行调整,所用的编程方法只针对问题。
#导入数据和数据预处理
#生成0-1均匀分布的随机数
import numpy as np#调用numpy库,目的是使用矩阵,对数据矩阵进行操作
np.random.seed(12345)
import matplotlib.pyplot as plt#调用matplotlib中的函数pyplot,为画图做准备
uni_data=np.random.uniform(0,1,size=(100,1))
input_x=np.sort(uni_data,axis=0)
#构造一个取正值函数
def pv(x):
    if x<0:
        y=0
    else:
        y=x
    return y
#计算样本矩阵
#因为i的取值最大为100-2,所以循环的次数在98
def getSmoothSpline(x):
    n=[]
    for i in np.arange(98):
        y1=(pv(x-input_x[i])**3-pv(x-input_x[99])**3)/(input_x[99]-input_x[i])
        y2=(pv(x-input_x[98])**3-pv(x-input_x[99])**3)/(input_x[99]-input_x[98])
        a=(y1-y2)[0]
        n.append(a)
    return(n)
N1=np.zeros((100,98))
for j in np.arange(100):
    N1[j,:]=np.array(getSmoothSpline(input_x[j])).reshape(1,98)
N2=np.hstack((np.ones((100,1)),input_x))
N=np.hstack((N2,N1))
###########################求惩罚项的矩阵
##求积分的过程中需要用到两两点横坐标之间的比较,这里先比较大小。
W1=np.zeros((100,100))
for i in np.arange(100):
    for j in np.arange(100):
        W1[i,j]=max(input_x[i],input_x[j])
"""
由于前两个基的二阶导等于0,其余基的二阶导乘以这两项的积分始终等于零,先考虑剩余的基
,最后利用矩阵的方法,合并成最后的惩罚矩阵。下面给出的是,二阶导之后两两两个基分段积分
下面的积分计算过于冗长。
"""
W2=np.zeros((98,98))
for i in np.arange(98):
    for j in np.arange(98):
        h1=36/((input_x[99]-input_x[j])*(input_x[99]-input_x[i]))
        h2=(1/3)*(input_x[98])**3
        h3=(1/2)*(input_x[i]+input_x[j])*input_x[98]**2
        h4=input_x[i]*input_x[j]*(input_x[98])
        h21=(1/3)*(W1[i,j])**3
        h31=(1/2)*(input_x[i]+input_x[j])*(W1[i,j]**2)
        h41=input_x[i]*input_x[j]*(W1[i,j])
        h=h1*(h2-h3+h4-h21+h31-h41)
        H11=36*(input_x[98]-input_x[i])*(input_x[98]-input_x[j])
        H12=(input_x[99]-input_x[98])**2*(input_x[99]-input_x[i])*(input_x[99]-input_x[j])
        H1=H11/H12
        H2=(1/3)*(input_x[99]-input_x[98])**3
        H=H1*H2
        W2[i,j]=H+h
W3=np.zeros((100,100))
W3[2:,2:]=W2
W=W3
#矩阵的运算,求出光滑矩阵,其中S表示的为光滑矩阵,lambda的值取得是0.2
th=N.T.dot(N)+0.2*W
pinvMatrix=np.linalg.pinv(th)
S=(N.dot(pinvMatrix)).dot(N.T)
##画出热图
import seaborn as sns
sns.heatmap(S, cmap='ocean')
plt.show()
The Elements of Statistical Learning》是机器学习领域的经典教材,第四章介绍了线性方法的基本概念和应用。 第四章主要包括以下内容: 1. 线性回归:介绍了线性回归的基本概念和数学模型。通过最小二乘法可以获得最优的回归系数,同时还介绍了基于正则化的线性回归模型,如岭回归和Lasso回归。 2. 多项式回归:介绍了多项式回归的概念和方法。通过引入多项式特征,可以提高线性模型的拟合能力,同时也存在过拟合的问题。 3. 基函数回归:介绍了基函数回归的概念和方法。通过引入非线性基函数,可以将线性模型拓展到非线性模型,并提高模型的灵活性。 4. 局部回归:介绍了局部加权线性回归(Locally Weighted Regression)的方法。该方法通过赋予不同数据点不同权重,来进行局部拟合。局部回归可以克服全局模型造成的误差,并提供更精确的预测结果。 5. 逻辑回归:介绍了逻辑回归的概念和应用。逻辑回归常用于二分类问题的建模,在线性回归的基础上,通过引入逻辑函数将输出映射到概率空间。 6. 多分类问题:介绍了多分类问题的处理方法。通过引入一对多(One-vs-Rest)或一对一(One-vs-One)的策略,将多分类问题转化为一系列二分类问题。 以上是《The Elements of Statistical Learning》第四章的主要内容概述。通过学习这些内容,读者可以了解线性方法在机器学习中的基本原理和应用,并在实际问题中运用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值