一、问题描述
汽车属性数据集来自:1985年沃德汽车年鉴/Ward’s Automotive Yearbook。
Ward’s Automotive Yearbook(沃德汽车年鉴) 是一本权威的汽车行业出版物,自1924年以来每年出版一次(除了二战期间有中断)。这本年鉴提供了对全球汽车产业的全面概述和分析,包括以下几个主要方面:
主要内容和特点
- 行业概况
- 对全球汽车市场、生产和销售的统计数据和分析。
- 各主要汽车制造商的市场表现和战略动向。
- 市场研究
- 细分市场的详细报告,涵盖乘用车、轻型卡车及其他类型车辆。
- 消费者趋势、购买行为和市场预测。
- 技术和创新
- 新车型、新技术及未来发展趋势的介绍。
- 对新能源汽车、智能网联汽车等前沿技术的深入探讨。
- 经济和政策影响
- 分析宏观经济因素和政策法规变化对汽车产业的影响。
- 贸易政策、环保法规等方面的最新动态。
- 公司概况
- 全球主要汽车制造商及零部件供应商的详细介绍和财务表现。
- 企业并购、合作及战略联盟的分析。
- 历史数据
- 长期的汽车生产和销售历史数据,便于进行趋势分析。
影响力和读者群体
- 专业读者:汽车制造商、供应商、行业分析师及研究人员。
- 商业决策者:涉及汽车产业链的相关企业在战略规划和市场布局时的重要参考资料。
- 学术机构:用于教学和研究活动的宝贵资料。
发布形式
- 纸质版及电子版均有销售,部分内容也可在官方网站上查阅获取。
《Ward’s Automotive Yearbook》因其全面性、准确性和权威性而广受认可,是汽车行业内不可或缺的参考书籍之一。
二、数据集内容
汽车属性数据集包含三种类型的实体:
(a) 汽车的各种特性
(b) 保险风险评级,
(c) 与其他汽车相比,其在使用中的标准化损失。
第二个评级对应于汽车比其价格所指示的风险程度更高。汽车最初被分配一个与其价格相关的风险因子符号。然后,如果它更危险(或更少),则通过向上(或向下)移动该符号来调整这个符号。精算师称这个过程为“符号化”。+3的值表示汽车有风险,-3表示它可能相当安全。
第三个因素是每辆受保车辆每年的相对平均损失理赔支付额。该值针对特定尺寸分类(两门小型车、旅行车、运动/特种车等)内的所有汽车进行了标准化,代表每辆车每年的平均损失理赔支付额。
数据结构
汽车属性数据集car_price.csv字段定义:
Car_ID:编号
Symboling:保险风险评级,+3的值表示汽车有风险,-3表示它可能相当安全。(分类)
carCompany:汽车公司名称(分类)
fueltype:汽车燃料类型,即汽油或柴油(分类)
aspiration:汽车使用的吸气方式(分类)
doornumber:汽车的门数(分类)
carbody:汽车的车身(分类)
drivewheel:驱动轮的类型(分类)
enginelocation:汽车发动机的位置(分类)
wheelbase:汽车的轴距(数值)
carlength:汽车的长度(数值)
carwidth:汽车的宽度(数值)
carheight: 汽车的高度(数值)
curbweight:没有乘客或行李的汽车重量。(数值)
enginetype:发动机类型。(分类)
cylindernumber:汽车中放置的气缸(分类)
enginesize:汽车的大小(数值)
fuelsystem:汽车的燃料系统(分类)
boreratio: 汽车的缸径比(数值)
stroke:发动机内的冲程或容积(数值)
compressionratio:汽车的压缩比(数值)
horsepower:马力(数值)
peakrpm:汽车峰值转速(数值)
citympg:城市里程(数值)
highwaympg:高速公路里程(数值)
price(Dependent variable):汽车的价格(数值)
数据样例
car_ID | symboling | CarName | fueltype | aspiration | doornumber | carbody | drivewheel | enginelocation | wheelbase | carlength | carwidth | carheight | curbweight | enginetype | cylindernumber | enginesize | fuelsystem | boreratio | stroke | compressionratio | horsepower | peakrpm | citympg | highwaympg | price |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 3 | alfa-romero giulia | gas | std | two | convertible | rwd | front | 88.6 | 168.8 | 64.1 | 48.8 | 2548 | dohc | four | 130 | mpfi | 3.47 | 2.68 | 9 | 111 | 5000 | 21 | 27 | 13495 |
2 | 3 | alfa-romero stelvio | gas | std | two | convertible | rwd | front | 88.6 | 168.8 | 64.1 | 48.8 | 2548 | dohc | four | 130 | mpfi | 3.47 | 2.68 | 9 | 111 | 5000 | 21 | 27 | 16500 |
各字段取值范围:
- symboling: -3, -2, -1, 0, 1, 2, 3.
- normalized-losses: 连续值从 65 到 256.
- make:
alfa-romero, audi, bmw, chevrolet, dodge, honda, isuzu, jaguar, mazda, mercedes-benz, mercury, mitsubishi, nissan, peugot, plymouth, porsche, renault, saab, subaru, toyota, volkswagen, volvo
- fuel-type: diesel, gas.
- aspiration: std, turbo.
- num-of-doors: four, two.
- body-style: hardtop, wagon, sedan, hatchback, convertible.
- drive-wheels: 4wd, fwd, rwd.
- engine-location: front, rear.
- wheel-base: 连续值从 86.6 到 120.9.
- length: 连续值从 141.1 到 208.1.
- width: 连续值从 60.3 到 72.3.
- height: 连续值从 47.8 到 59.8.
- curb-weight: 连续值从 1488 到 4066.
- engine-type: dohc, dohcv, l, ohc, ohcf, ohcv, rotor.
- num-of-cylinders: eight, five, four, six, three, twelve, two.
- engine-size: 连续值从 61 到 326.
- fuel-system: 1bbl, 2bbl, 4bbl, idi, mfi, mpfi, spdi, spfi.
- bore: 连续值从 2.54 到 3.94.
- stroke: 连续值从 2.07 到 4.17.
- compression-ratio: 连续值从 7 到 23.
- horsepower: 连续值从 48 到 288.
- peak-rpm: 连续值从 4150 到 6600.
- city-mpg: 连续值从 13 到 49.
- highway-mpg: 连续值从 16 到 54.
- price: 连续值从 5118 到 45400.
许可协议
This dataset is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license.
引用要求
Schlimmer, J. (1985). Automobile [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C5B01C.
三、k-means分类算法
K-means聚类算法是一种常用的无监督学习方法,其目的是将数据集划分为K个簇,使得每个数据点与其所属簇的中心(质心)之间的距离之和最小化。K-means算法通过迭代优化来寻找最佳的簇划分,其中,成本函数(或称为目标函数)用于衡量聚类效果的好坏。
K-means的成本函数通常定义为簇内误差平方和(Within-Cluster Sum of Squares, WCSS)
要获取成本函数的最佳拐点处,即找到使成本函数最小化的簇数量 k,可以采用以下方法:
1. 手肘法(Elbow Method)
手肘法是一种直观的方法,通过绘制成本函数随簇数量变化的曲线,寻找曲线的“拐点”作为最佳的簇数量。
步骤如下:
- 对于每个可能的簇数量 k(通常从1到10或更大),运行K-means算法并计算成本函数值。
- 将每个 k 对应的成本函数值绘制成曲线。
- 观察曲线,找到成本函数下降速度明显减缓的点,即“拐点”,该点对应的 k 值通常被认为是最佳的簇数量。
2. 轮廓系数(Silhouette Coefficient)
轮廓系数是一种衡量聚类效果的内部指标,其值范围在[-1, 1]之间。轮廓系数越高,表示簇内的数据点越相似,簇间的差异越大。
步骤如下:
- 对于每个可能的簇数量 k,运行K-means算法并计算每个数据点的轮廓系数。
- 计算所有数据点的平均轮廓系数。
- 选择使平均轮廓系数最大的 k 值作为最佳的簇数量。
3. 信息准则(Information Criterion)
信息准则如AIC(Akaike Information Criterion)和BIC(Bayesian Information Criterion)也可以用于选择最佳的簇数量。这些准则在模型复杂度和拟合优度之间进行权衡。
步骤如下:
- 对于每个可能的簇数量 k,运行K-means算法并计算模型的似然函数值。
- 根据似然函数值和模型的自由度,计算AIC或BIC值。
- 选择使AIC或BIC值最小的 k 值作为最佳的簇数量。
安装
conda create -n kmeans python=3.10
conda activate kmeans
conda install scikit-learn
conda install pandas
conda install matplotlib
说明:
sklearn
(Scikit-Learn)是一个流行的 Python 机器学习库,提供了许多算法和工具,用于数据挖掘和数据分析任务。
pandas
是一个流行的 Python 数据操作和分析库。它提供了高性能、易用的数据结构和数据分析工具,广泛应用于数据科学、金融、统计等领域。
matplotlib
是一个流行的 Python 数据可视化库,广泛用于创建各种静态、动态和交互式的图表。它提供了丰富的绘图功能,适用于从简单线图到复杂三维图形的各种需求。
源码
k-means.py
from sklearn.cluster import KMeans
from sklearn import preprocessing
import pandas as pd
import matplotlib.pyplot as plt
data=pd.read_csv('car_price.csv',encoding='gbk')
print(data)
train_x=data[['wheelbase','carlength','carwidth','carheight','curbweight','enginesize','boreratio','stroke','compressionratio','horsepower','peakrpm','citympg','highwaympg','price']]
min_max=preprocessing.MinMaxScaler()
train_x=min_max.fit_transform(train_x)
#用手肘法求最佳分类数量
Cost_function = []
for k in range(1,18):
kmeans = KMeans(n_clusters=k)
kmeans.fit(train_x)
Cost_function.append(kmeans.inertia_)
x = range(1,18)
plt.xlabel('K(no. of clusters)')
plt.ylabel('Cost_function')
plt.plot(x,Cost_function,'o-')
plt.show()
#根据图像最佳拐点处为7,因此取k值为7
kmeans = KMeans(n_clusters=7)
kmeans.fit(train_x)
predict_y = kmeans.predict(train_x)
print(train_x)
print(predict_y)
result = pd.concat((data,pd.DataFrame(predict_y)),axis=1)
result.rename({0:u"result"},axis=1,inplace=True)
car_group = result.groupby(['result'])['CarName'].unique()
for i in car_group:
print(i)
运行
(kmeans) >python k-means.py
car_ID symboling CarName fueltype aspiration ... horsepower peakrpm citympg highwaympg price
0 1 3 alfa-romero giulia gas std ... 111 5000 21 27 13495.0
1 2 3 alfa-romero stelvio gas std ... 111 5000 21 27 16500.0
2 3 1 alfa-romero Quadrifoglio gas std ... 154 5000 19 26 16500.0
3 4 2 audi 100 ls gas std ... 102 5500 24 30 13950.0
4 5 2 audi 100ls gas std ... 115 5500 18 22 17450.0
.. ... ... ... ... ... ... ... ... ... ... ...
200 201 -1 volvo 145e (sw) gas std ... 114 5400 23 28 16845.0
201 202 -1 volvo 144ea gas turbo ... 160 5300 19 25 19045.0
202 203 -1 volvo 244dl gas std ... 134 5500 18 23 21485.0
203 204 -1 volvo 246 diesel turbo ... 106 4800 26 27 22470.0
204 205 -1 volvo 264gl gas turbo ... 114 5400 19 25 22625.0
[205 rows x 26 columns]
[[0.05830904 0.41343284 0.31666667 ... 0.22222222 0.28947368 0.20795889]
[0.05830904 0.41343284 0.31666667 ... 0.22222222 0.28947368 0.28255797]
[0.2303207 0.44925373 0.43333333 ... 0.16666667 0.26315789 0.28255797]
...
[0.65597668 0.7119403 0.71666667 ... 0.13888889 0.18421053 0.40631051]
[0.65597668 0.7119403 0.71666667 ... 0.36111111 0.28947368 0.43076312]
[0.65597668 0.7119403 0.71666667 ... 0.16666667 0.23684211 0.43461099]]
[1 1 5 1 5 5 4 4 4 5 1 1 5 5 4 4 6 6 3 3 3 3 3 3 3 3 3 3 1 5 3 3 3 3 3 3 3
3 3 1 1 1 1 1 3 3 1 6 6 6 3 3 3 3 3 1 1 1 5 1 1 1 1 2 1 4 2 2 6 6 6 6 6 6
6 4 3 3 3 3 1 1 5 5 5 1 1 1 1 3 2 3 3 3 3 3 3 3 3 1 1 5 4 5 5 0 5 4 2 4 2
4 2 4 2 4 2 4 3 3 3 3 3 1 5 0 0 0 0 0 1 1 4 4 4 4 4 4 1 1 1 1 1 1 1 1 1 1
1 1 3 3 3 1 1 1 3 3 2 2 3 1 1 1 1 3 3 1 1 1 1 1 5 1 2 1 1 1 5 5 5 5 2 1 2
1 1 2 1 1 1 5 2 1 4 4 4 4 4 4 4 4 4 2 4]
['nissan kicks' 'porsche macan' 'porcshce panamera' 'porsche cayenne'
'porsche boxter']
['alfa-romero giulia' 'alfa-romero stelvio' 'audi 100 ls' 'bmw 320i'
'dodge dart custom' 'honda prelude' 'honda accord' 'honda civic'
'honda civic (auto)' 'isuzu MU-X' 'isuzu D-Max ' 'mazda 626' 'mazda glc'
'mazda rx-7 gs' 'mazda glc custom l' 'mazda glc custom' 'mazda rx-4'
'mitsubishi mirage g4' 'mitsubishi g4' 'mitsubishi montero'
'mitsubishi pajero' 'mitsubishi outlander' 'nissan rogue' 'nissan nv200'
'plymouth valiant' 'renault 12tl' 'renault 5 gtl' 'subaru' 'subaru dl'
'subaru brz' 'subaru baja' 'subaru r1' 'subaru r2' 'subaru trezia'
'subaru tribeca' 'toyota corona hardtop' 'toyota corolla 1600 (sw)'
'toyota carina' 'toyota corolla' 'toyota mark ii'
'toyota corolla liftback' 'toyota corona' 'toyota corona liftback'
'toyota starlet' 'toyota tercel' 'volkswagen 1131 deluxe sedan'
'volkswagen type 3' 'volkswagen 411 (sw)' 'volkswagen dasher' 'vw dasher'
'vw rabbit']
['mazda glc deluxe' 'mazda rx-7 gs' 'buick electra 225 custom'
'nissan gt-r' 'peugeot 304' 'peugeot 504' 'peugeot 604sl'
'peugeot 505s turbo diesel' 'toyota corona' 'toyota corolla'
'toyota celica gt' 'vokswagen rabbit' 'volkswagen model 111'
'volkswagen super beetle' 'volkswagen rabbit custom' 'volvo 246']
['chevrolet impala' 'chevrolet monte carlo' 'chevrolet vega 2300'
'dodge rampage' 'dodge challenger se' 'dodge d200' 'dodge monaco (sw)'
'dodge colt hardtop' 'dodge colt (sw)' 'dodge coronet custom'
'honda civic' 'honda civic cvcc' 'honda accord cvcc' 'honda accord lx'
'honda civic 1500 gl' 'honda accord' 'honda civic 1300' 'isuzu D-Max '
'isuzu D-Max V-Cross' 'maxda rx3' 'maxda glc deluxe' 'mazda rx2 coupe'
'mazda rx-4' 'mazda glc deluxe' 'mitsubishi mirage' 'mitsubishi lancer'
'mitsubishi outlander' 'mitsubishi g4' 'Nissan versa' 'nissan rogue'
'nissan latio' 'nissan titan' 'nissan leaf' 'nissan juke' 'nissan note'
'nissan clipper' 'plymouth fury iii' 'plymouth cricket'
'plymouth satellite custom (sw)' 'plymouth fury gran sedan'
'toyota corona mark ii' 'toyota corona' 'toyota corolla 1200'
'toyota mark ii' 'toyota celica gt liftback' 'toyota corolla tercel']
['audi 100ls' 'audi 5000' 'audi 4000' 'bmw z4' 'bmw x4' 'mazda glc'
'mercury cougar' 'nissan fuga' 'peugeot 504' 'peugeot 504 (sw)'
'peugeot 604sl' 'saab 99e' 'saab 99le' 'saab 99gle' 'volvo 145e (sw)'
'volvo 144ea' 'volvo 244dl' 'volvo 245' 'volvo 264gl' 'volvo diesel']
['alfa-romero Quadrifoglio' 'audi 100ls' 'audi fox' 'audi 5000s (diesel)'
'bmw x1' 'bmw x3' 'dodge coronet custom (sw)' 'mazda glc 4'
'mitsubishi outlander' 'mitsubishi g4' 'mitsubishi mirage g4'
'nissan dayz' 'nissan otti' 'nissan teana' 'nissan clipper'
'plymouth duster' 'toyota cressida' 'toyota corolla liftback'
'toyota corona' 'toyota starlet' 'toyouta tercel' 'volkswagen rabbit']
['bmw x5' 'bmw x3' 'jaguar xj' 'jaguar xf' 'jaguar xk'
'buick century luxus (sw)' 'buick century' 'buick skyhawk'
'buick opel isuzu deluxe' 'buick skylark' 'buick century special'
'buick regal sport coupe (turbo)']