【阿旭机器学习实战】【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.]])


相关文章
|
12天前
|
机器学习/深度学习 TensorFlow API
机器学习实战:TensorFlow在图像识别中的应用探索
【10月更文挑战第28天】随着深度学习技术的发展,图像识别取得了显著进步。TensorFlow作为Google开源的机器学习框架,凭借其强大的功能和灵活的API,在图像识别任务中广泛应用。本文通过实战案例,探讨TensorFlow在图像识别中的优势与挑战,展示如何使用TensorFlow构建和训练卷积神经网络(CNN),并评估模型的性能。尽管面临学习曲线和资源消耗等挑战,TensorFlow仍展现出广阔的应用前景。
38 5
|
30天前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
63 2
|
30天前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
56 1
|
1月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
1月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
1月前
|
机器学习/深度学习 数据采集 分布式计算
【Python篇】深入机器学习核心:XGBoost 从入门到实战
【Python篇】深入机器学习核心:XGBoost 从入门到实战
83 3
|
24天前
|
数据采集 机器学习/深度学习 TensorFlow
声纹识别实战:从数据采集到模型训练
【10月更文挑战第16天】声纹识别技术通过分析个人的语音特征来验证其身份,具有无接触、便捷的特点。本文将带你从零开始,一步步完成声纹识别系统的构建,包括数据采集、音频预处理、特征提取、模型训练及评估等关键步骤。我们将使用Python语言和相关的科学计算库来进行实践。
92 0
|
2天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
10 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
23天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)