【阿旭机器学习实战】【30】二手车价格预估--KNN回归案例

简介: 【阿旭机器学习实战】【30】二手车价格预估--KNN回归案例

1. 加载数据

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

关注公众号:阿旭算法与机器学习,回复:“ML30”即可获取本文数据集、源码与项目文档,欢迎共同学习交流

#读取数据
df = pd.read_csv('data.csv')
df  # data frame

2.特征工程

2.1 数据编码

# 把颜色独热编码
df_colors = df['Color'].str.get_dummies().add_prefix('Color: ')
# 把类型独热编码
df_type = df['Type'].apply(str).str.get_dummies().add_prefix('Type: ')
# 添加独热编码数据列
df = pd.concat([df, df_colors, df_type], axis=1)
# 去除独热编码对应的原始列
df = df.drop(['Brand', 'Type', 'Color'], axis=1)
df

# 特征热力图
matrix = df.corr()
f, ax = plt.subplots(figsize=(8, 6))
sns.heatmap(matrix, square=True)
plt.title('Car Price Variables')
# 特征两两组合,观察相关性
sns.pairplot(
    df[['Construction Year', 'Days Until MOT', 'Odometer', 'Ask Price']],size=2)
plt.show()

热图中,黑色表示负相关,白色表示正相关。通过解读以上两张图,选择相关性较大的特征,对模型进行训练。

3.构建模型进行训练与评估

3.1 构建模型并训练

# -*- coding: utf-8 -*-
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.read_csv('D:/data.csv')
df_colors = pd.get_dummies(df['Color'], prefix='Color:')
df_type = pd.get_dummies(df['Type'].apply(str), prefix='Type:')
df = pd.concat([df, df_colors, df_type], axis=1)
df.drop(['Brand', 'Type', 'Color'], axis=1, inplace=True)
# 准备样本数据,选取'Construction Year', 'Days Until MOT', 'Odometer'这样个特征进行模型训练
X = df[['Construction Year', 'Days Until MOT', 'Odometer']]
y = df['Ask Price'].values.reshape(-1, 1)
# 生成训练及测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=41)
# 特征缩放--标准化
X_normalizer = StandardScaler()  # N(0,1)
X_train = X_normalizer.fit_transform(X_train)  # 对训练特征数据进行拟合并归一
X_test = X_normalizer.transform(X_test)  # 在对训练特征数据拟合之后应用到测试数据上
y_normalizer = StandardScaler()
y_train = y_normalizer.fit_transform(y_train)
y_test = y_normalizer.transform(y_test)
# 训练模型,由于此处是回归问题,不用设置成奇数
knn = KNeighborsRegressor(n_neighbors=2)
knn.fit(X_train, y_train.ravel())  # ravel 转换为一维数组
# 预测价格
y_pred = knn.predict(X_test)
# 由于之前对标签数组做过归一化,所以现在需要反向归一,还原成真实值
y_pred_inv = y_normalizer.inverse_transform(y_pred)
y_test_inv = y_normalizer.inverse_transform(y_test)
# Build a plot
plt.scatter(y_pred_inv, y_test_inv)
plt.xlabel('Prediction')
plt.ylabel('Real value')
# Now add the perfect prediction line
diagonal = np.linspace(500, 1500, 100)  # linspace()指定的间隔内返回均匀间隔的数字
plt.plot(diagonal, diagonal, '-r')  # -:直线 r:红色
plt.xlabel('Predicted ask price')
plt.ylabel('Ask price')
plt.show()

3.2 模型评估

knn
KNeighborsRegressor(algorithm='auto', leaf_size=30, metric='minkowski',
          metric_params=None, n_jobs=None, n_neighbors=2, p=2,
          weights='uniform')
pred = knn.predict(X_test)
pred
array([ 1.36676513,  1.36676513, -0.68269804,  0.13462294])
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_pred_inv, y_test_inv)
175.5
from sklearn.metrics import mean_squared_error
mean_squared_error(y_pred_inv, y_test_inv)
56525.5
y_pred_inv
array([1199., 1199.,  700.,  899.])
y_test_inv
array([[1300.],
       [1650.],
       [ 650.],
       [ 799.]])


相关文章
|
1天前
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
随着DeepSeek-R1模型的广泛应用,越来越多的开发者开始尝试复现类似的模型,以提升其推理能力。
|
4天前
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
随着DeepSeek-R1模型的广泛应用,越来越多的开发者开始尝试复现类似的模型,以提升其推理能力。
|
2月前
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
133 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
3月前
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
151 0
|
3月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
107 0
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
196 6
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
276 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
解锁机器学习的新维度:元学习的算法与应用探秘
元学习作为一个重要的研究领域,正逐渐在多个应用领域展现其潜力。通过理解和应用元学习的基本算法,研究者可以更好地解决在样本不足或任务快速变化的情况下的学习问题。随着研究的深入,元学习有望在人工智能的未来发展中发挥更大的作用。
|
1月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
53 14
|
2月前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
95 2