IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习实验 第三章:岭回归和Lasso回归算法 -> 正文阅读

[人工智能]机器学习实验 第三章:岭回归和Lasso回归算法

import numpy as np
from sklearn.datasets import load_boston, fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import PolynomialFeatures

任务1:Lasso回归

【任务目标】

实现使用次梯度下降算法对Lasso回归问题的求解

【任务步骤】

  1. 传入特征组和标签,以及学习率和搜索步数
  2. 计算目标函数的次梯度
  3. 更新 w 的值
"""
类说明:Lasso
    编写代码实现使用次梯度下降算法对Lasso回归算法的求解
    
Parameters:
      X   - 特征组
      y   - 标签组
    eta   - 学习率
      N   - 搜索步数
   Lambda - 正则化系数
Returns:
"""
class Lasso:
    def __init__(self, Lambda = 1):
        self.Lambda = Lambda

    def fit(self, X, y, eta = 0.1, N = 1000):
#####  Start Code Here  #####   
        # 获取X的维度
        m,n=X.shape
        # 初始化w
        w=np.zeros((n,1))
        self.w=w
        # 开始N轮循环,使用次梯度下降算法对Lasso回归求解
        for t in range(N):
            e=X.dot(w)-y
            v=2*X.T.dot(e)/m+self.Lambda*np.sign(w)
            w=w-eta*v
            self.w+=w    
        self.w /= N
#####  End Code Here  #####    
    def predict(self, X):
        return X.dot(self.w)

任务2:岭回归

【任务目标】

实现岭回归算法

【任务步骤】

  1. 传入特征和标签
  2. 计算岭回归目标函数的最优解
"""
类说明:RidgeRegression
    编写代码实现实现岭回归算法
    
Parameters:
      X   - 特征组
      y   - 标签组
   Lambda - 正则化系数
Returns:
"""
class RidgeRegression:
    def __init__(self, Lambda = 1):
        self.Lambda = Lambda

    def fit(self, X, y):
#####  Start Code Here  ##### 
        # 获取X的维度
        m,n=X.shape
        
        # 计算岭回归目标函数的最优解
        r=m*np.diag(self.Lambda*np.ones(n))
        self.w=np.linalg.inv(X.T.dot(X)+r).dot(X.T).dot(y)
        
#####  End Code Here  ##### 
    def predict(self, X):
        return X.dot(self.w)

任务3:房价预测

【任务目标】

使用Lasso回归和岭回归算法来求解房价预测问题。

【任务步骤】

  1. 加载加尼福利亚房屋数据集
  2. 按照一定比例划分训练集和测试集
  3. 对训练集和测试集进行特征处理
  4. 定义模型进行训练
  5. 计算模型训练得分、模型测试得分以及均方误差
def process_features(X):
    scaler = StandardScaler()
    X = scaler.fit_transform(X)
    m, n = X.shape
    X = np.c_[np.ones((m, 1)), X]  
    return X

# 加载房价数据集
housing = fetch_california_housing()
X = housing.data
y = housing.target.reshape(-1, 1)

#####  Start Code Here  #####
# 划分数据集,训练测试集比例 8:2
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size = 0.2,random_state=0)
# 对训练集和测试集进行特征处理
X_train=process_features(X_train)
X_test=process_features(X_test)
# 定义Lasso回归模型
model=Lasso(Lambda=0.001)
# 训练模型
model.fit(X_train,y_train,eta=0.01,N=50000)

mse = mean_squared_error(y_test, model.predict(X_test))
print("Lasso模型训练得分:" + str(r2_score(y_train, model.predict(X_train))))  # 训练集
print("Lasso模型测试得分:" + str(r2_score(y_test, model.predict(X_test))))  # 待测集
print("Lasso模型的均方误差 = {}".format(mse))

# 定义岭回归模型
model=RidgeRegression(Lambda=0.01)

# 训练模型
model.fit(X_train,y_train)

#####  End Code Here  #####
mse = mean_squared_error(y_test, model.predict(X_test))
print("岭回归模型训练得分:" + str(r2_score(y_train, model.predict(X_train))))  # 训练集
print("岭回归模型测试得分:" + str(r2_score(y_test, model.predict(X_test))))  # 待测集
print("岭回归模型的均方误差 = {}".format(mse))

任务4:多项式回归

【任务目标】

使用Lasso回归和岭回归求解多项式回归问题

【任务步骤】

  1. 加载加尼福利亚房屋数据集
  2. 按照一定比例划分训练集和测试集
  3. 对特征组进行多项式处理
  4. 对数据进行特征处理
  5. 定义模型进行训练
  6. 计算模型训练得分、模型测试得分以及均方误差
def process_features(X):
    scaler = StandardScaler()
    X = scaler.fit_transform(X)
    m, n = X.shape
    X = np.c_[np.ones((m, 1)), X]  
    return X

poly = PolynomialFeatures(degree = 2)
#####  Start Code Here  #####
# 加载数据集
housing = fetch_california_housing()
X = housing.data
y = housing.target.reshape(-1, 1)

# 划分训练集和测试集
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size = 0.2,random_state=0)

# 对训练数据进行多项式处理
X_train=poly.fit_transform(X_train)

# 对测试数据进行多项式处理
X_test=poly.fit_transform(X_test)

# 对训练集和测试集进行特征处理
X_train=process_features(X_train)
X_test=process_features(X_test)
# 定义Lasso回归模型
model=Lasso(Lambda=0.01)

# 训练模型
model.fit(X_train,y_train,eta=0.01,N=50000)

mse = mean_squared_error(y_test, model.predict(X_test))
print("Lasso模型训练得分:" + str(r2_score(y_train, model.predict(X_train))))  # 训练集
print("Lasso模型测试得分:" + str(r2_score(y_test, model.predict(X_test))))  # 待测集
print("Lasso模型的均方误差 = {}".format(mse))

# 定义岭回归模型
model=RidgeRegression(Lambda=0.01)

# 训练模型
model.fit(X_train,y_train)

#####  End Code Here  #####
mse = mean_squared_error(y_test, model.predict(X_test))
print("岭回归模型训练得分:" + str(r2_score(y_train, model.predict(X_train))))  # 训练集
print("岭回归模型测试得分:" + str(r2_score(y_test, model.predict(X_test))))  # 待测集
print("岭回归模型的均方误差 = {}".format(mse))

实验结果

任务三:

任务四

?

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:29:07  更:2022-09-21 00:32:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 17:36:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计