08- 汽车产品聚类分析综合项目 (机器学习聚类算法) (项目八)

news2024/11/18 7:34:25

项目难点

  • 主要通过聚类算法 kmeans 进行调整 .
    • 需要找出分为几类时模型参数最佳 .  (n_clusters)
  • 找出性价比较高的车
  • 获取训练数据: train_X = data.drop(['car_ID','CarName'],axis = 1)
  • 计算模型的得分和误差: kmeans.inertia_     # inertia簇内误差平方和
from sklearn.cluster import KMeans  # 聚类算法
from sklearn.metrics import silhouette_score
kmeans = KMeans(n_clusters= k)
kmeans.fit(train_x)
sse.append(kmeans.inertia_)   # inertia簇内误差平方和
# 通过预测值和实际值的对比计算模型的得分
ss.append(silhouette_score(train_x,kmeans.predict(train_x)))
  • LabelEncoder:  python:sklearn标签编码(LabelEncoder) sklearn.preprocessing.LabelEncoder的使用:在训练模型之前,通常都要对数据进行一定得处理。将类别编号是一种常用的处理方法,比如把类别“电脑”,“手机”编号为0和1,可使用LabelEncoder函数。

    • 作用:  将n个类别编码为0~n-1之间的整数(包括0和n-1)

  • 找出聚类种类最佳参数
sse =[]
ss = []
for k in range(2,11):
    kmeans = KMeans(n_clusters= k)
    kmeans.fit(train_x)
    sse.append(kmeans.inertia_)
    ss.append(silhouette_score(train_x,kmeans.predict(train_x)))
  • kmean 聚类算法模型
kmeans = KMeans(n_clusters=8)
kmeans.fit(train_x)
predict_y = kmeans.predict(train_x)   # 预测


一  汽车产品聚类分析综合项目

现在人们购车成为稀松平常,你的第一辆车是什么品牌,你打算什么时候更换车辆?汽车品牌多如牛毛,使用数据分析相关知识点,使用机器学习中的聚类算法,进行建模,从而对根据汽车相关属性对汽车进行类别划分,帮你选好车!熟悉算法建模业务流程,掌握机器学习建模的思想和基本操作。

  • 数据加载
  • 数值编码化
  • 归一化操作
  • Kmeans算法参数筛选
  • 分层聚类使用
  • DBSCAN算法使用
  • 对比不同算法效果

1  导入模块

# 使用 KMeans 进行聚类,导入库
from sklearn.cluster import KMeans  # 聚类算法
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
# 预处理
from sklearn import preprocessing   # 归一化
from sklearn.preprocessing import LabelEncoder  # 标签编码
import pandas as pd
# 矩阵运算
import numpy as np

2  数据加载

data = pd.read_csv('./car_price.csv')
data.shape     # (205, 26)

3  去除无效数据

train_X = data.drop(['car_ID','CarName'],axis = 1)
train_X.shape    # 205, 24

4  特征工程(将属性转换为数值)

# 将非数值特征转换为数值
le = LabelEncoder()  # 直接将字符串转换为数值
colums = ['fueltype','aspiration','doornumber','carbody','drivewheel',
          'enginelocation','enginetype','cylindernumber','fuelsystem']
for column in colums:
    # 训练并将标签转换为归一化的代码
    train_X[column] = le.fit_transform(train_X[column])
train_X

 5  归一化 (降维)

# 规范化到[0,1] 空间
min_max_scaler = preprocessing.MinMaxScaler()
# MinMaxscaler( )将每个要素缩放到给定范围,怡合数据,然后进行转换
train_x = min_max_scaler.fit_transform(train_X)
train_x

6  聚类参数选择

6.1 显示所有系统字体

# 查找自己电脑的字体,从中选择
# 本电脑上,选择的STKaiti
from matplotlib.font_manager import FontManager
fm = FontManager()
[font.name for font in fm.ttflist]

6.2 字体设置

plt.rcParams['font.family'] = 'STKaiti'
plt.rcParams['font.size'] = 20

6.3  SSE(簇惯性)

from sklearn.cluster import KMeans  # 聚类算法
from sklearn.metrics import silhouette_score
sse =[]
ss = []
for k in range(2,11):
    kmeans = KMeans(n_clusters= k)
    kmeans.fit(train_x)
    
    sse.append(kmeans.inertia_)   # inertia簇内误差平方和
    # 通过预测值和实际值的对比计算模型的得分
    ss.append(silhouette_score(train_x,kmeans.predict(train_x)))
    
plt.figure(figsize=(16,6))
x = range(2,11)
plt.subplot(1,2,1)
plt.plot(x,sse,'o-')
plt.xlabel('K')
plt.ylabel('SSE簇惯性')

plt.subplot(1,2,2)
plt.plot(x,ss,'r*-')
plt.xlabel('K')
plt.ylabel('轮廓系数')
plt.savefig('./1-聚类簇数.png',dpi = 200)

  • 当分类增加的时候, 误差逐渐变小, 当分类数为9的时候, 模型得分较高 .

6.4  聚类运算

kmeans = KMeans(n_clusters=8)
kmeans.fit(train_x)

# 预测
predict_y = kmeans.predict(train_x)
predict_y

7  结果分析

7.1  结果合并 (将结果分类添加到元素数据集中)

result = pd.concat((data,pd.DataFrame(predict_y)),axis =1)  # 增加一列分类数据
result.rename({0:u'聚类结果'},axis = 1,inplace = True)
result

# 分组运算
g1 = result.groupby(by = ['聚类结果','carbody'])[['price']].mean()
g1

g2 = g1.unstack()   # 数据重塑
g2

g2.sort_values(by= ('price','sedan'))

 7.2  低端轿车聚类结果

# 查看,类别是1的标准三厢车(具体根据分组运算结果确定)
cond = result.apply(lambda x : x['聚类结果'] == 4 and 'sedan' in x['carbody'] ,axis = 1)
columns = ['CarName','wheelbase','price','horsepower','carbody','fueltype','聚类结果']
# 价格降序排名
result[cond][columns].sort_values('price',ascending= False)

7.3  高端轿车聚类结果

# 根据条件(售价)筛选高端轿车(三厢车)
cond = result.apply(lambda x : x['聚类结果'] == 7 and 'sedan' in x['carbody'], axis =1)
columns = ['CarName','wheelbase','price','horsepower','carbody','fueltype','聚类结果']
# 价格降序排名
result[cond][columns].sort_values('price',ascending= False)

7.4  中端 SUV聚类结果

cond = result.apply(lambda x : x['聚类结果'] == 2 and 'wagon' in x['carbody'], axis =1)
columns = ['CarName','wheelbase','price','horsepower','carbody','fueltype','聚类结果']
# 价格降序排名
result[cond][columns].sort_values('price',ascending= False)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习/机器学习】为什么要归一化?归一化方法详解

【深度学习/机器学习】为什么要归一化?归一化方法详解 文章目录1. 介绍1.1 什么是归一化1.2 归一化的好处2. 归一化方法2.1 最大最小标准化(Min-Max Normalization)2.2 Z-score标准化方法2.3 非线性归一化2.4 L范数归一化方法(最典…

宝塔搭建实战人才求职管理系统admin前端vue源码(二)

大家好啊,我是测评君,欢迎来到web测评。 上一期给大家分享骑士cms后台端在宝塔的搭建部署方式,这套系统是前后端分离的架构,前端是用vue2开发的,还需要在本地打包手动发布上宝塔,所以本期给大家分享&#x…

智能笔式万用表简单体验加拆解 - VC6012C - 智能电笔

简而言之,能用,甚至还挺好用的,机身大小参考上面的示意图,跟比较粗的记号笔差不多。单纯想买个万用表的话,如果不追求这种精简的外形,同价位有其他功能更强的选项。其实就是个能自动切换档位的智能万用表加…

山东大学软件学院面向对象简答题整理【个人向】

面向对象简答题整理【个人向】 0.试用面向对象语言简述改写和重定义的异同,以及方法绑定时的差别 改写是子类的方法和父类的方法具有相同的方法名和类型签名重定义是子类的方法和父类的方法方法名相同但类型签名不同在方法绑定时,改写是动态绑定&#…

kettle开发-Day38-其实chatGPT一直在身边

前言:最近chatGPT火出圈,其实不是chatGPT多智能,只是它用了一种新的交互方式来组织我们现有的知识,然后通过“高智商”的表达来使我们惊艳。但是目前或者未来的人工智能缺少创造力,他们只会整合信息目的是提高我们的效…

力扣sql简单篇练习(十八)

力扣sql简单篇练习(十八) 1 报告的记录 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT extra report_reason,count(distinct post_id) report_count FROM Actions WHERE action_dateDATE_SUB(2019-07-05,interval 1 day) AND extra IS NOT N…

突破监管“困局”,ScanV为您提供重保安全监测保障!

三月重保即将开始,重保期间是重要时间区间、重要基础设施和重要业务系统安全保障的“三重”考验期。 作为基于实战的网络安全提供商,知道创宇ScanV为您提供三月重保期间免费安全监测保障,并专门针对监管客户重保时期需求提供实战化监测保障方…

GGX发布全新路线图,揭示具备 Layer0 特性且可编程的跨链基建生态

据彭博社报道,具备跨链通信且可编程的 Layer0 基础设施协议 Golden Gate (GGX) 已进行了 两年的线下开发,于近日公开发布了最新的路线图,该路线图不仅显示了该生态在过去两年的发展历程,也披露了 2023 年即将实现的重要里程碑。 G…

IDEA上配置并运行Scala

这里使用 java17 和 Scala3.2.2作为演示 其中, IDEA 版本为2022.3.2 首先,要安装scala插件 Of course, you can also install third one above to format you scala program! 个人认为 Build system 选择 Intellij 比较方便! 然后&#xf…

jvm中指定时区信息user.timezone

问题 同一份程序使用时间LocalDateTime类型,在国内和国外部署后,返回的时间信息前端使用出问题。 因为LocalDateTime不带时区信息,国内调用后,前端页面默认使用的浏览器所在os的时区(我们的系统中没有给用户设置时区&…

Apache Beanutils为什么被禁止使用?

收录于热门专栏Java基础教程系列(进阶篇) 在实际的项目开发中,对象间赋值普遍存在,随着双十一、秒杀等电商过程愈加复杂,数据量也在不断攀升,效率问题,浮出水面。 问:如果是你来写…

09 OpenCV图形检测

1 轮廓描边 cv2.findContours() 函数是OpenCV中用于寻找轮廓的函数之一。它可以用于在二值图像中查找并检测出所有的物体轮廓,以及计算出这些轮廓的各种属性,例如面积、周长、质心等。 cv2.findContours() 函数的语法如下: contours, hiera…

张杰清唱高启强专属BGM简直就是天作之合,千万别点进来看

张杰清唱高启强专属BGM简直就是天作之合,千万别点进来看,#张杰#BGM#音乐 张杰演唱的《听》狂飙高启强自从出现在抖音上更是火得不可思议,它成为了不少年轻人喜爱的BGM,尤其是用它作为专属BGM的抖音视频更是受到网友的一致好评。 …

详解如何在ChatGPT内构建一个Python解释器

这篇文章主要为大家详细介绍了如何在ChatGPT内构建一个Python解释器,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下目录引用:Art Kulakov 《How to Build a Python Interpreter Inside ChatGPT》这个灵感来自于一…

Day892.MySql读写分离过期读问题 -MySQL实战

MySql读写分离过期读问题 Hi,我是阿昌,今天学习记录的是关于MySql读写分离过期读问题的内容。 一主多从架构的应用场景:读写分离,以及怎么处理主备延迟导致的读写分离问题。 一主多从的结构,其实就是读写分离的基本…

Java SE(1)——JDK安装,基本数据类型和运算

JDK安装,基本数据类型和运算 一 Java语言的初体验 1.JDK下载地址 Oracle官网: Java Downloads | Oracle,根据需要,下载最新或历史版本。 2.运行Java文件 编写一个简单的 HelloWorld.java 文件 public class HelloWorld{publ…

提供网络可测试的接口【公共Webservice】

提供网络可测试的接口 1、腾讯QQ在线状态 WEB 服务 Endpoint: qqOnlineWebService Web 服务 Disco: http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?disco WSDL: http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl 腾讯QQ在线状态 WEB 服…

【每日一题】 将一句话单词倒置,标点不倒置

用C语言将一句话的单词倒置,标点不倒置。 比如输入: i like shanghai. 输出得到: shanghai. like i 这道题目有很多种做法,既可以用递归,也可以分成两部分函数来写,本文就详细来讲解分装为两个函数的做法。…

如何从0开始搭建Vue组件库

前言: 组件设计是通过对功能及视觉表达中元素的拆解、归纳、重组,并基于可被复用的目的,形成规范化的组件,通过多维度组合来构建整个设计方案,將这些组件整理在一起,便形成组件库。本文我们主要讲述基于 V…

微服务学习:SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

目录 一、高级篇 二、面试篇 实用篇 day05-Elasticsearch01 安装elasticsearch 1.部署单点es 2.部署kibana 一、高级篇 二、面试篇 实用篇 day05-Elasticsearch01 安装elasticsearch 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要…