资源简介

1.自编 Lasso 算法,求解方法不限(最小角度规划和快速迭代收缩阈值 FIST 或者其他),说明采用的是何种类型求解方法。2.基于波士顿房价数据集,采用自编 Lasso 算法预测波士顿房价。共 506 个样本,前一半样本作为训练集,后一半样本作为测试集。给出模型在 RMSE 指标上的表现。3. 使用 scikit-learn 实现的回归算法(至少 3 种)来预测波斯顿房价,并对比结果。

资源截图

代码片段和文件信息

#!/usr/bin/env python
# coding: utf-8

# In[1]:


#导入需要的包
from matplotlib import pyplot as plt
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
import pandas as pd
import torch
import torch.utils.data as Data
import torch.nn as nn
from torch.nn import init
import torch.optim as optim


# In[2]:


#加载数据集


# In[3]:


house_data = datasets.load_boston()
print(house_data)


# In[4]:


plt.rcParams[‘font.sans-serif‘] = [‘SimHei‘]
plt.rcParams[‘axes.unicode_minus‘] = False

print(house_data.feature_names)


# In[5]:


x_data = house_data[‘data‘]
y_data = house_data[‘target‘]
print(x_data.shapey_data.shape)
namedata = house_data.feature_names


# In[6]:


# 先要查看数据的类型,是否有空值,数据的描述信息等等。
boston_df = pd.Dataframe(house_data.data columns=house_data.feature_names)
boston_df[‘PRICE‘] = house_data.target
# 计算每一个特征和房价的相关系数
boston_df.corr()[‘PRICE‘]


# In[7]:


# 可以看出LSTAT、PTRATIO、RM三个特征的相关系数大于0.5,这三个特征和价格都有明显的线性关系。
plt.figure(facecolor=‘white‘)
corr = boston_df.corr()
corr = corr[‘PRICE‘]
corr[abs(corr) > 0.5].sort_values().plot.bar()
plt.show()

for i in range(13):
    plt.subplot(53i+1)
    plt.scatter(x_data[:i]y_datas=8)
    plt.title(namedata[i])
plt.show()


# In[8]:


#清洗数据,把房屋价格为50的值去掉
i_=[]
for i in range(len(y_data)):
    if y_data[i] == 50:
        i_.append(i)
x_data = np.delete(x_datai_axis = 0)
y_data = np.delete(y_datai_axis = 0)
print(x_data.shapey_data.shape)
j_=[]
for i in range(13):
    if namedata[i] == ‘RM‘ or namedata[i] == ‘PTRATIO‘ or namedata[i] == ‘LSTAT‘:
        continue
    j_.append(i)
x_data = np.delete(x_dataj_axis=1)

X_train X_test y_train y_test = train_test_split(x_datay_datarandom_state=0test_size=0.2)
#print(X_train.shape X_test.shape y_train.shape y_test.shape)


# In[9]:


print(X_train.shape X_test.shape y_train.shape y_test.shape)


# In[10]:


lr = 0.03

batch_size = 10
#将训练数据的特征和标签组合
X_train = torch.tensor(X_traindtype = torch.float)
y_train = torch.tensor(y_traindtype = torch.float)
X_test = torch.tensor(X_testdtype = torch.float)
y_test = torch.tensor(y_testdtype = torch.float)
train_dataset = Data.TensorDataset(X_trainy_train)

data_iter = Data.DataLoader(
    dataset = train_dataset     #torch TensorDataset format
    batch_size = batch_size  #mini batch size
    shuffle = True     #是否打乱顺序
    num_workers =0



num_inputs = 3
net = nn.Sequential(
    nn.Linear(num_inputs 1)

print(net)


# In[11]:


init.normal_(net[0].weightmean = 0 std =0.01) #normal初始化权重
init.constant_(net[0].biasval = 0)   #contant初始化方差

#定义损失函数
loss = nn.MSELoss()
#定义优化算法
optimizer = optim.SGD(net.parameters()lr=0.001)

# 训练模型
num_epochs = 3
for epoch in range(1 num_epochs + 1):
    for X y in data_iter:
        output = net(X)
        l = loss(output y.view(-1 1))
        optimizer.zero_grad()
        l.backward()
        opti

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      49082  2020-10-24 23:25  housing.data

     文件    1118817  2020-11-25 15:13  实验1.docx

     文件       4303  2020-10-26 20:18  exp1.py

----------- ---------  ---------- -----  ----

              1172202                    3


评论

共有 条评论