数据集 AUTO MPG
Auto MPG(Miles Per Gallon)数据集,它是一个经典的回归问题数据集,常用于机器学习和统计分析。该数据集记录了不同型号汽车的燃油效率(即每加仑燃油行驶的英里数)以及其他多个相关特征。
数据集特征:
mpg: 每加仑燃油行驶的英里数(目标变量)。
cylinders: 气缸数量,表示发动机的气缸数。
displacement: 发动机排量(立方英寸)。
horsepower: 发动机功率(马力)。
weight: 车辆重量(磅)。
acceleration: 0到60英里每小时的加速度时间(秒)。
model_year: 车辆生产年份。
origin: 车辆产地(1=美国,2=欧洲,3=日本)。
def get_data():
# 指定要检查的文件名
file_name = 'mlg.csv'
# 获取当前工作目录
current_directory = os.getcwd()
# 构建完整的文件路径
file_path = os.path.join(current_directory, file_name)
# 检查文件是否存在
if os.path.isfile(file_path):
data = pd.read_csv('mlg.csv')
else:
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'
column_names = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight','acceleration', 'model_year', 'origin']
data = pd.read_csv(url, names=column_names, na_values='?', comment='\t', sep=' ', skipinitialspace=True)
# 保存数据到当前目录
data.to_csv('mlg.csv',index=None)
return data
多变量模型
class MultiVariableModel(nn.Module):
def __init__(self):
super(MultiVariableModel, self).__init__()
self.fc1 = nn.Linear(num_features, 64) # 输入特征数为 num_features
self.fc2 = nn.Linear(64, 32)
self.fc3 = nn.Linear(32, 1) # 输出一个预测值
def forward(self, x):
x = torch.relu(self.fc1(x)) # 第一层
x = torch.relu(self.fc2(x)) # 第二层
x = self.fc3(x) # 输出层
return x
训练和预测
data = get_data()
# drop 'origin'列
data = data.drop('origin',axis= 1)
# print(data.isna().sum())
data = data.dropna()
train_dataset = data.sample(frac=0.8, random_state=0)
test_dataset = data.drop(train_dataset.index)
#归一化
scaler = MinMaxScaler(feature_range=(0, 1))
train_dataset = scaler.fit_transform(train_dataset)
test_dataset = scaler.fit_transform(test_dataset)
#
train_features = train_dataset[:,1:]
test_features = test_dataset[:,1:]
train_labels = train_features[:,0]
test_labels = test_features[:,0]
# 将数据转换为 PyTorch 张量
X_tensor = torch.tensor(train_features)
y_tensor = torch.tensor(train_labels).view(-1, 1) # 目标变量需要是二维的
# 特征数量
num_features = 6
# 创建模型实例
model = MultiVariableModel()
# 创建数据集和数据加载器
dataset = TensorDataset(X_tensor.float(), y_tensor.float())
dataloader = DataLoader(dataset, batch_size=16, shuffle=True)
# 选择优化器和损失函数
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.MSELoss()
# 训练模型
num_epochs = 50
for epoch in range(num_epochs):
for inputs, targets in dataloader:
optimizer.zero_grad() # 清空梯度
outputs = model(inputs) # 前向传播
loss = criterion(outputs, targets) # 计算损失
loss.backward() # 反向传播
optimizer.step() # 更新权重
if (epoch + 1) % 10 == 0: # 每10个epoch打印一次损失
print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')
# # 训练完成后,可以进行预测
with torch.no_grad():
test_input = torch.tensor(test_features) # 预测
prediction = model(test_input.float()).detach().numpy()
plt.scatter(test_labels,prediction)
plt.show()
标签:features,self,dataset,test,PyTorch,train,线性,data,油耗
From: https://www.cnblogs.com/conpi/p/18620898