一、UCI数据库中Sonar数据集简介
Sonar数据集,全称为"Connectionist Bench (Sonar, Mines vs. Rocks)",是UCI呆板学习库中一个经典的数据集,常用于模式辨认和呆板学习研究领域。这个数据集最初是由加拿大Dalhousie大学的Ian T. Nabney博士收集整理,用于练习神经网络和其他分类算法,以辨认海洋环境中的水雷和岩石。
数据来源及背景
该数据集来源于海军研究项目,此中包含了60个频率脉冲声纳信号的反射强度测量值,这些信号是从水中固定位置发射的,目标是水底的物体,包罗金属水雷和各种类型的岩石。数据收罗设备是一套拖曳阵列声纳系统(Towed Array Sonar System),可以或许在差异角度和频率下发送声波并接收回波,通太过析这些回波的特性来判定海底物体的类型。
数据集详情
- 样本数量:共有208个样本,此中97个是水雷(标记为'M'),111个是岩石(标记为'R')。
- 特性数量:每个样本包含60个浮点型属性,这些属性代表了差异频率脉冲声纳信号的反射强度。
- 目标变量:数据会合的末了一个字段是分类标签,指示该样本是水雷还是岩石。
数据格式与布局
数据集以逗号分隔的文本文件格式存储,每行代表一个样本,此中前60列为特性值,第61列是种别标签。比方,一行数据可能看起来像这样:“0.0070,0.0185,...,0.0943,R”。
数据用途
Sonar数据集广泛应用于多种呆板学习场景,特别是分类题目标研究,包罗但不限于:
- 测试和比力差异分类算法的性能。
- 探究特性选择和降维技能的有效性。
- 验证数据预处置惩罚和清洗策略的重要性。
- 实验超参数优化和模型选择的过程。
由于数据集的多样性和清楚定义的任务,它成为了学术界和工业界进行初步算法实验的理想之选。无论是初学者还是资深数据科学家,都可以从中获取有价值的经验和洞见。
二、特性选择与支持向量机简介
特性选择
特性选择是呆板学习和数据分析中的一个重要步骤,重要目标是从一组初始特性中挑选出最具影响力的子集,以提升模型的性能,同时减少模型复杂度,提高模型泛化本领,加快练习和猜测的速度。特性选择有助于解决“维度劫难”题目,即随着特性数量增加,模型容易陷入过拟合的状态。
方法概述
特性选择重要有三种类型的方法:
1. Filter Methods(过滤式方法):这类方法独立于任何呆板学习算法工作,仅依赖于某些统计度量来评价特性的相关性,常见的有相关系数、卡方检验、互信息等。
2. Wrapper Methods(包裹式方法):它们使用详细的呆板学习算法作为黑盒,通过添加或删除特性,探求最佳特性聚集,典型算法包罗递归特性消除(Recursive Feature Elimination, RFE)、遗传算法等。
3. Embedded Methods(嵌入式方法):这类方法在模型练习的过程中自动完成特性选择,如正则化方法(Lasso、Elastic Net),决策树和随机森林中的特性重要性排名等。
支持向量机(SVM)
支持向量机(Support Vector Machine, SVM)是一种监督学习模型,重要用于分类和回归分析。它的核心思想是找到一个超平面,使得两类之间的间隔最大化,纵然得离超平面最近的样本点(支持向量)间隔超平面的间隔最大。这样的超平面被称为最大间隔超平面,它可以或许最好地划分两个种别的数据。
工作原理
1. 线性可分情况:在二维空间中,如果数据可以通过一条直线完善分开,那么在多维空间中,就存在一个超平面可以或许将差异种别的数据分开。
2. 非线性情况:对于线性不可分的数据,SVM会利用核技巧(Kernel Trick)将数据映射到更高维度的空间,使之成为线性可分。常用的核函数包罗多项式核、径向基函数核(RBF核)等。
3. 软边界:在真实天下的分类题目中,很少能找到完善的分类边界。因此,SVM允许肯定水平上的误分类,引入松弛变量和惩罚参数C来控制偏差项的影响水平。
特性选择与SVM的结合
特性选择在SVM的应用中尤为重要,缘故原由在于:
- 减少特性数量可以降低SVM练习的时间复杂度。
- 只保存与目标相关的特性可以增强模型的泛化本领,防止过拟合。
- 简化的模型更易于理解和摆设。
在实际应用中,特性选择可以作为预处置惩罚步骤,也可以集成到SVM的学习过程中。比方,RFE(递归特性消除)方法就是一种常用的技能,它基于SVM权重系数的大小来进行特性排序和选择;而L1正则化的线性SVM(如LinearSVC with 'l1' penalty)也能自然地实现特性选择。
综上所述,特性选择和SVM在呆板学习中各自扮演偏重要的角色,合理运用两者可以或许显著提升模型的效率和猜测精度。
三、代码实现
- from sklearn.model_selection import train_test_split
- from sklearn.feature_selection import SelectFromModel
- from sklearn.linear_model import LogisticRegression
- from sklearn.preprocessing import StandardScaler
- from sklearn.svm import SVC
- from sklearn.metrics import accuracy_score
- import pandas as pd
-
- #加载数据集
- url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/undocumented/connectionist-bench/sonar/sonar.all-data'
- data = pd.read_csv(url, header=None)
-
- #数据预处理
- x = data.iloc[:, 0:-1].values
- y = data.iloc[:, -1].values
-
- #划分训练集和测试集
- x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
-
- #L1正则化的logistic回归模型进行嵌入法特征选择
- #logistic分类模型:正则参数C控制正则效果的大小,C越大,正则效果越弱
- logistic_model=LogisticRegression(penalty='l1',C=0.5,solver='liblinear',random_state=1234)
-
- #嵌入式特征选择模型,选择前20个特征
- selector=SelectFromModel(estimator=logistic_model,max_features=20)
- selector.fit(x_train,y_train)
- x_train_selected = selector.fit_transform(x_train, y_train)
- x_test_selected = selector.transform(x_test)
-
-
- #特征选择结果
- print("L1正则嵌入法选择的特征:",selector.get_support(True))
- print("L1正则化Logistic回归模型获得的测试精度",
- selector.estimator_.score(x_test,y_test))
-
- 使用支持向量机建立分类模型并比较
- # 原始数据的SVM分类
- svm_model = SVC()
- svm_model.fit(x_train, y_train)
- y_pred = svm_model.predict(x_test)
- print("原特征分类准确率:", accuracy_score(y_test, y_pred))
-
- # 特征选择后的SVM分类
- svm_model_selected = SVC()
- svm_model_selected.fit(x_train_selected, y_train)
- y_pred_selected = svm_model_selected.predict(x_test_selected)
- print("特征选择后分类准确率:", accuracy_score(y_test, y_pred_selected))
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |