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


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

    ✍🏻作者简介:Python学习
    🐋 希望大家多多支持,我们一起进步!😄
    如果文章对你有帮助的话,
    欢迎评论 💬点赞👍🏻 收藏 📂加关注+


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


    目录

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

    源代码

    1. 数据集概述:手机特征的集合,包括电池电量、摄像头规格、网络支持、内存、屏幕尺寸和其他属性。“price_range”列将手机按价格范围进行分类,使该数据集适用于手机分类和价格预测任务。
    2. # 导入第三方库
    3. import warnings
    4. import matplotlib.pyplot as plt
    5. import numpy as np
    6. import pandas as pd
    7. import seaborn as sns
    8. sns.set(font='SimHei')
    9. warnings.filterwarnings('ignore')
    10. # 读取数据
    11. df = pd.read_csv('train.csv')
    12. df.head() # 查看数据前五行
    13. df.shape
    14. df.info()
    15. df.describe()
    16. df.isnull().sum()
    17. any(df.duplicated())
    18. # 按价格范围分配手机
    19. sns.countplot(x=df['price_range'], data=df)
    20. plt.title("Distribution of Phone by Price Range")
    21. plt.ylabel("Total Phone")
    22. plt.show()
    23. # 计数手机有双Sim卡
    24. sns.countplot(x=df['dual_sim'], data=df)
    25. plt.title("Distribution of Phone by Dual SIM")
    26. plt.ylabel("Total Phone")
    27. plt.show()
    28. # 价格范围vs电池功率
    29. sns.boxplot(x=df['price_range'], y=df['battery_power'], data=df)
    30. plt.title("Price Range VS Battery Power")
    31. plt.show()
    32. # 价格范围vs内存
    33. sns.boxplot(x=df['price_range'], y=df['ram'], data=df)
    34. plt.title("Price Range VS RAM")
    35. plt.show()
    36. # 价格范围vs时钟速度
    37. sns.boxplot(x=df['price_range'], y=df['clock_speed'], data=df)
    38. plt.title("Price Range VS Clock Speed")
    39. plt.show()
    40. # 相关系数热力图
    41. plt.figure(figsize=(12,8))
    42. sns.heatmap(df.corr(), cmap='coolwarm')
    43. plt.title("Correlation Heatmap")
    44. plt.show()
    45. # 创建一个特征和目标变量
    46. X = df.drop('price_range', axis=1)
    47. y = df['price_range']
    48. from sklearn.model_selection import train_test_split
    49. from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
    50. # 拆分数据集
    51. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    52. # 构建逻辑回归模型
    53. from sklearn.linear_model import LogisticRegression
    54. lr = LogisticRegression()
    55. lr.fit(X_train,y_train)
    56. pred = lr.predict(X_test)
    57. print(accuracy_score(y_test, pred))
    58. print(confusion_matrix(y_test, pred))
    59. print(classification_report(y_test, pred))
    60. # 构建随机森林模型
    61. from sklearn.ensemble import RandomForestClassifier
    62. rfc = RandomForestClassifier()
    63. rfc.fit(X_train, y_train)
    64. pred = rfc.predict(X_test)
    65. print(accuracy_score(y_test, pred))
    66. print(confusion_matrix(y_test, pred))
    67. print(classification_report(y_test, pred))
    68. # 构建决策树模型
    69. from sklearn.tree import DecisionTreeClassifier
    70. dt = DecisionTreeClassifier()
    71. dt.fit(X_train, y_train)
    72. pred = dt.predict(X_test)
    73. print(accuracy_score(y_test, pred))
    74. print(confusion_matrix(y_test, pred))
    75. print(classification_report(y_test, pred))
    76. # 构建SVM支持向量机模型
    77. from sklearn.svm import SVC
    78. svc = SVC()
    79. svc.fit(X_train, y_train)
    80. pred = svc.predict(X_test)
    81. print(accuracy_score(y_test, pred))
    82. print(confusion_matrix(y_test, pred))
    83. print(classification_report(y_test, pred))
    84. # 模型预测
    85. res = pd.DataFrame()
    86. res['真实值'] = y_test
    87. res['预测值'] = pred
    88. res.sample(10) # 随机抽取10个
  • 相关阅读:
    内核和用户空间中的TID,GID, PID,uid
    任务九 深度学习 K近邻学习
    EventEmitter3在vue中的使用
    兆易创新GD32 (四)FreeRTOS 移植 与 CMSIS OS2
    Spring中事务的传播行为有哪些
    智能优化算法:侏儒猫鼬优化算法-附代码
    杂想之一个C++内存泄露案例
    HCI 解决方案对比:Harvester 和 OpenStack
    Linux:文件搜索
    JDK9相比于JDK8,究竟变强了多少
  • 原文地址:https://blog.csdn.net/m0_64336780/article/details/135303004