大数据分析案例-基于SVM支持向量机算法构建手机价格分类预测模型

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者

🐋 希望大家多多支持,我们一起进步!😄

如果文章对你有帮助的话,

欢迎评论 💬点赞👍🏻 收藏 📂加关注+


喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章

|----------------------------------------------------------------------------------------------------------------------------|
| 大数据分析案例-基于随机森林算法预测人类预期寿命 |
| 大数据分析案例-基于随机森林算法的商品评价情感分析 |
| 大数据分析案例-用RFM模型对客户价值分析(聚类) |
| 大数据分析案例-对电信客户流失分析预警预测 |
| 大数据分析案例-基于随机森林模型对北京房价进行预测 |
| 大数据分析案例-基于RFM模型对电商客户价值分析 |
| 大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型 |
| 大数据分析案例-基于决策树算法构建员工离职预测模型 |
| 大数据分析案例-基于KNN算法对茅台股票进行预测 |
| 大数据分析案例-基于多元线性回归算法构建广告投放收益模型 |
| 大数据分析案例-基于随机森林算法构建返乡人群预测模型 |
| 大数据分析案例-基于决策树算法构建金融反欺诈分类模型 |
[大数据分析案例合集]


目录

1.项目背景

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

4.4特征工程

4.5模型构建

4.6模型预测

5.实验总结

源代码


1.项目背景

随着科技的飞速发展和人们对通讯需求的不断提高,手机已成为现代生活中不可或缺的电子产品。市场上手机品牌众多、型号繁杂,价格也参差不齐,从几百元到上万元不等。对于消费者而言,如何在众多手机中选择适合自己需求和预算的产品成为了一大挑战。

为了帮助消费者更好地进行手机购买决策,并为企业提供市场定价策略参考,本研究旨在构建一个基于SVM支持向量机算法的手机价格分类预测模型。通过该模型,我们希望能够准确地将手机产品根据其价格划分到不同的类别中,从而为消费者提供一个快速筛选符合预算范围的手机的方法,同时也为企业分析市场竞争格局和制定价格策略提供数据支持。

SVM作为一种强大的监督学习算法,在处理高维数据、解决非线性分类问题以及防止过拟合等方面具有显著优势。通过选择合适的核函数和调整相关参数,我们相信SVM算法能够在手机价格分类预测问题上取得良好的效果。

2.项目简介

2.1项目说明

本研究将利用SVM支持向量机算法构建手机价格分类预测模型,旨在为消费者提供便捷的购买决策支持,同时为企业市场分析和定价策略提供有价值的参考信息。

2.2数据说明

本数据集来源于Kaggle,数据集概述:手机特征的集合,包括电池电量、摄像头规格、网络支持、内存、屏幕尺寸和其他属性。"price_range"列将手机按价格范围进行分类,使该数据集适用于手机分类和价格预测任务。

2.3技术工具

Python版本:3.9

代码编辑器:jupyter notebook

3.算法原理

支持向量机(Support Vector Machine,简称SVM)是一种常用的监督学习算法,主要用于分类和回归分析。SVM的基本思想是在特征空间中寻找一个最优超平面,使得该超平面能够最大程度地分隔两个类别的样本,并且保证分类的准确性。

SVM算法的原理可以简要概括为以下几个步骤:

  1. 初始化:选择核函数和相关参数,如惩罚系数C、核函数参数等。核函数用于将原始特征空间映射到更高维的特征空间,以解决原始特征空间中的线性不可分问题。
  2. 构建最优超平面:在特征空间中,寻找一个最优超平面,使得两个类别的样本能够最大程度地分隔开。这个最优超平面可以通过最大化间隔(即支持向量到超平面的距离)来实现。
  3. 求解支持向量:在训练过程中,只有少数样本点会决定最优超平面的位置,这些样本点被称为支持向量。支持向量是离分隔超平面最近的点,它们对于分类结果具有决定性的影响。
  4. 决策函数:根据最优超平面和支持向量,构建决策函数。对于新的未知样本,可以将其特征向量代入决策函数中,根据函数值的正负来判断其所属的类别。

SVM算法具有许多优点,如分类效果好、鲁棒性强、适用于高维数据等。同时,SVM也存在一些不足之处,如对参数敏感、计算复杂度高、难以处理大规模数据等。在实际应用中,需要根据具体的问题和数据特点来选择合适的算法和参数。

4.项目实施步骤

4.1理解数据

导入第三方库并加载数据

查看数据大小

查看数据基本信息

查看描述性统计

4.2数据预处理

统计缺失值情况

结果发现数据不存在缺失值

检测数据是否存在重复值

结果为False,说明不存在重复值

4.3探索性数据分析

4.4特征工程

选择特征变量和目标变量,拆分数据集为训练集和测试集,其中测试集比例为0.3

4.5模型构建

对比三个模型,可以发现SVM支持向量机的模型准确率最高,达到0.95,模型效果最好,故我们选择其作为最终模型。

4.6模型预测

随机抽取10中错了1个,模型效果还不错。

5.实验总结

  1. 模型有效性:使用SVM算法构建的手机价格分类预测模型是有效的。通过训练集的学习,模型能够较为准确地对手机价格进行分类预测。
  2. 特征选择的重要性:在模型构建过程中,特征选择对于预测精度至关重要。选取与手机价格相关性强的特征(如品牌、配置、屏幕尺寸、电池容量等)能够显著提高模型的预测性能。
  3. 参数优化的影响:SVM算法中的参数(如惩罚系数C和核函数参数γ)对模型性能有显著影响。通过实验发现,通过交叉验证等方法对参数进行优化,可以进一步提高模型的预测精度。
  4. 模型泛化能力:通过对比训练集和测试集的预测结果,发现模型在测试集上的表现略逊于训练集,但整体泛化能力良好。这表明模型对于未知数据的预测能力较强,具有一定的实用价值。
  5. 与其他模型的比较:将SVM模型与其他常见分类算法(如决策树、随机森林、神经网络等)进行比较,发现SVM模型在本实验中具有较高的预测精度和稳定性。这可能是因为SVM对于高维数据的处理能力较强,且对于非线性关系有较好的处理能力。
  6. 模型改进方向:虽然SVM模型在本实验中表现良好,但仍有一定的改进空间。未来可以考虑引入更多的特征、优化特征提取方法、尝试不同的核函数等方法来进一步提高模型的预测性能。

综上所述,基于SVM算法构建的手机价格分类预测模型具有较高的预测精度和实用性,为手机价格预测提供了一种有效的方法。同时,实验过程中也发现了模型改进的方向,为未来的研究提供了参考。

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

源代码

python 复制代码
数据集概述:手机特征的集合,包括电池电量、摄像头规格、网络支持、内存、屏幕尺寸和其他属性。"price_range"列将手机按价格范围进行分类,使该数据集适用于手机分类和价格预测任务。
# 导入第三方库
import warnings
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.set(font='SimHei')
warnings.filterwarnings('ignore')
# 读取数据
df = pd.read_csv('train.csv')
df.head() # 查看数据前五行
df.shape
df.info()
df.describe()
df.isnull().sum()
any(df.duplicated())
# 按价格范围分配手机
sns.countplot(x=df['price_range'], data=df)
plt.title("Distribution of Phone by Price Range")
plt.ylabel("Total Phone")
plt.show()
# 计数手机有双Sim卡
sns.countplot(x=df['dual_sim'], data=df)
plt.title("Distribution of Phone by Dual SIM")
plt.ylabel("Total Phone")
plt.show()
# 价格范围vs电池功率
sns.boxplot(x=df['price_range'], y=df['battery_power'], data=df)
plt.title("Price Range VS Battery Power")
plt.show()
# 价格范围vs内存
sns.boxplot(x=df['price_range'], y=df['ram'], data=df)
plt.title("Price Range VS RAM")
plt.show()
# 价格范围vs时钟速度
sns.boxplot(x=df['price_range'], y=df['clock_speed'], data=df)
plt.title("Price Range VS Clock Speed")
plt.show()
# 相关系数热力图
plt.figure(figsize=(12,8))
sns.heatmap(df.corr(), cmap='coolwarm')
plt.title("Correlation Heatmap")
plt.show()
# 创建一个特征和目标变量
X = df.drop('price_range', axis=1) 
y = df['price_range']
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 构建逻辑回归模型
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_train,y_train)
pred = lr.predict(X_test)
print(accuracy_score(y_test, pred))
print(confusion_matrix(y_test, pred))
print(classification_report(y_test, pred))
# 构建随机森林模型
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier()
rfc.fit(X_train, y_train)
pred = rfc.predict(X_test)
print(accuracy_score(y_test, pred))
print(confusion_matrix(y_test, pred))
print(classification_report(y_test, pred))
# 构建决策树模型
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
pred = dt.predict(X_test)
print(accuracy_score(y_test, pred))
print(confusion_matrix(y_test, pred))
print(classification_report(y_test, pred))
# 构建SVM支持向量机模型
from sklearn.svm import SVC
svc = SVC()
svc.fit(X_train, y_train)
pred = svc.predict(X_test)
print(accuracy_score(y_test, pred))
print(confusion_matrix(y_test, pred))
print(classification_report(y_test, pred))
# 模型预测
res = pd.DataFrame()
res['真实值'] = y_test
res['预测值'] = pred
res.sample(10) # 随机抽取10个
相关推荐
hummhumm21 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
杜小满25 分钟前
周志华深度森林deep forest(deep-forest)最新可安装教程,仅需在pycharm中完成,超简单安装教程
python·随机森林·pycharm·集成学习
电子手信1 小时前
知识中台在多语言客户中的应用
大数据·人工智能·自然语言处理·数据挖掘·知识图谱
Chef_Chen1 小时前
从0开始学习机器学习--Day33--机器学习阶段总结
人工智能·学习·机器学习
Sxiaocai1 小时前
使用 PyTorch 实现并训练 VGGNet 用于 MNIST 分类
pytorch·深度学习·分类
databook1 小时前
『玩转Streamlit』--布局与容器组件
python·机器学习·数据分析
shansjqun1 小时前
教学内容全覆盖:航拍杂草检测与分类
人工智能·分类·数据挖掘
肖永威2 小时前
CentOS环境上离线安装python3及相关包
linux·运维·机器学习·centos
nuclear20112 小时前
使用Python 在Excel中创建和取消数据分组 - 详解
python·excel数据分组·创建excel分组·excel分类汇总·excel嵌套分组·excel大纲级别·取消excel分组
Lucky小小吴2 小时前
有关django、python版本、sqlite3版本冲突问题
python·django·sqlite