机器学习Dry Bean分析

1. introduction

This 本项目旨在对DryBean数据集进行详细分析,以揭示数据中的潜在信息和特征关系。DryBean数据集包含了7种不同品种的土耳其干豆数据,每种豆子都有16个特征,这些特征可以帮助我们了解豆子的形状、大小和形态。通过对这些特征进行探索性数据分析,我们可以更深入地了解各种豆子之间的差异,并找出可能影响豆子分类的关键因素。

在分析过程中,我们使用了Python编程语言和多种数据分析库,如pandas、seaborn和matplotlib。首先,我们对数据集进行了整体概览,包括类别分布和特征描述性统计。接着,我们通过特征分布直方图和关联度矩阵,对特征进行了可视化分析,以便更直观地观察特征之间的关系和数据的分布特点。

在对DryBea数据集进行初步的探索性数据分析之后,我们继续使用机器学习方法对这些豆子进行分类。机器学习是一种人工智能技术,可以从数据中学习并根据学到的知识进行预测或决策。在本项目中,我们的目标是利用机器学习模型,根据豆子的特征来识别和分类不同的干豆品种。

在对DryBean数据集进行初步的探索性数据分析之后,我们继续使用机器学习方法对这些豆子进行分类。机器学习是一种人工智能技术,可以从数据中学习并根据学到的知识进行预测或决策。在本项目中,我们的目标是利用机器学习模型,根据豆子的特征来识别和分类不同的干豆品种。

首先,我们将数据集划分为训练集和测试集,以便在训练模型后对其性能进行评估。接着,我们对数据进行预处理,包括缩放特征值、处理缺失数据以及编码类别标签等。这些预处理步骤有助于提高模型的准确性和稳定性。

然后,我们尝试了多种机器学习算法,如支持向量机(SVM)、随机森林(RF)、K最近邻(KNN)和梯度提升(GB)等,以找到最适合解决干豆分类问题的模型。为了比较这些模型的性能,我们使用了交叉验证技术,并计算了准确率、精确度、召回率和F1分数等评价指标。

2. 数据的探索1

import pandas as pd

# 读取Excel文件
data = pd.read_excel('Dataset.xlsx')

# 计算基本统计信息
stats = data.describe()

# 打印基本统计信息
print(stats)

从上述代码中,我们可以看到数据集包含 13611 个观测值,每个观测值由 16 个特征组成。通过计算数据集的基本统计信息,我们可以获取每个特征的均值、标准差、最小值、最大值和四分位数等描述性统计信息。

以下是对每个特征统计信息的简要概述:

Area:区域面积的均值为 53048.28,标准差为 29324.10。面积范围从最小值 20420 到最大值 254616,显示出较大的差异。

Perimeter:周长的均值为 855.28,标准差为 214.29。周长范围从最小值 524.74 到最大值 1985.37,同样显示出较大的差异。

MajorAxisLength 和 MinorAxisLength:主轴长和次轴长的均值分别为 320.14 和 202.27,标准差分别为 85.69 和 44.97。这两个特征表示形状的大小和形状。

AspectRation:宽高比的均值为 1.58,标准差为 0.25,范围从 1.02 到 2.43,表示形状的纵横比差异较大。

Eccentricity:偏心率的均值为 0.75,标准差为 0.09,范围从 0.22 到 0.91,表示形状的椭圆程度有很大差异。

ConvexArea:凸包面积的均值为 53768.20,标准差为 29774.92。面积范围从最小值 20684 到最大值 263261,显示出较大的差异。

EquivDiameter:等效直径的均值为 253.06,标准差为 59.18,范围从 161.24 到 569.37,表示形状大小差异较大。

Extent:形状的扩展程度均值为 0.75,标准差为 0.05,范围从 0.56 到 0.87,表示形状的扩展程度有一定差异。

Solidity:实心度的均值为 0.99,标准差为 0.00466,范围从 0.92 到 0.99,表示形状的实心程度较为接近。

roundness:圆度的均值为 0.87,标准差为 0.06,范围从 0.49 到 0.99,表示形状的圆度有一定差异。

Compactness:紧密度的均值为 0.80,标准差为 0.06,范围从 0.64 到 0.99,表示形状的紧密程度有一定差异。

ShapeFactor1、ShapeFactor2、ShapeFactor3 和 ShapeFactor4:这四个形状因子的均值和标准差分别为:(0.00656, 0.00113),(0.00172, 0.00060),(0.6436, 0.0990),(0.9951, 0.00437)。这些形状因子表示了不同方面的形状特征。

通过对这些统计信息的分析,我们可以对数据集中的特征分布有一个大致了解。值得注意的是,一些特征之间可能存在相关性(例如,Area 和 Perimeter),在后续的数据分析和建模过程中需要注意这一点。为了更好地了解这些特征之间的关系,可以使用相关系数矩阵、散点图矩阵等方法来进一步探索数据集。

此外,在进行机器学习建模之前,对数据进行预处理(例如,缺失值处理、异常值处理、特征缩放等)也是很关键的步骤。这将有助于提高模型的性能和稳定性。

数据的探索2

PCA(主成分分析)和t-SNE(t-distributed Stochastic Neighbor Embedding)是两种常用的数据降维可视化方法。它们的主要目的是将高维数据投影到低维空间(通常是二维或三维),以便于观察数据的结构和关系。这在数据探索、特征选择和模型评估等任务中非常有用。

PCA Visualization

PCA 是一种线性降维方法,通过对原始数据进行正交变换,将数据投影到新的特征空间。新特征空间中的每个维度(主成分)都是原始数据中方差最大的方向。PCA 可视化有以下优点:

解释方差: PCA 可以保留数据中最大的方差,从而在较低维度空间中保留尽可能多的信息。
计算效率: 相对于其他降维方法,PCA 的计算复杂度较低,因此在处理大规模数据时具有较好的性能。
特征选择: PCA 可以帮助我们识别数据中的主要特征,从而在特征选择时提供有价值的信息。
然而,PCA 的一个缺点是它假设数据的主成分是线性相关的。对于非线性数据,PCA 可能无法捕捉到复杂的结构。

t-SNE Visualization

t-SNE 是一种基于概率分布的非线性降维方法。它通过在高维和低维空间中保持样本之间的相似度来降低数据维度。t-SNE 可视化有以下优点:

非线性: t-SNE 可以捕捉到非线性数据结构,因此在数据具有复杂结构时,t-SNE 可能更具优势。
簇识别: t-SNE 能够以较好的分辨率揭示数据中的簇结构,有助于我们识别不同的数据子集。
然而,t-SNE 的一个缺点是计算复杂度较高,因此在处理大规模数据时可能较慢。此外,t-SNE 的结果可能受到超参数(如感知半径和迭代次数)的影响,因此需要多次尝试才能找到合适的参数设置。

总的来说,PCA 和 t-SNE 可视化都可以帮助我们更好地理解数据的结构和关系。PCA 适用于线性数据,具有较高的计算效率;而 t-SNE 能够处理非线性数据,揭示数据中的簇结构。在实际应用中,我们可以根据数据特点和任务需求选择合适的降维可视化方法。

3. KNN 预处理选择

Without Pre-Processing

import warnings
warnings.filterwarnings("ignore")

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.neighbors import KNeighborsClassifier

data = pd.read_excel('Dataset.xlsx')
print(data['Class'].value_counts())

# 定义特征和目标变量
X = data.drop('Class', axis=1)
y = data['Class']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

y_pred = knn.predict(X_test)

print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))
print("\nClassification Report:")
print(classification_report(y_test, y_pred))

以下不做预处理的结果

DERMASON    3546
SIRA        2636
SEKER       2027
HOROZ       1928
CALI        1630
BARBUNYA    1322
BOMBAY       522
Name: Class, dtype: int64
Confusion Matrix:
[[118   0 104   0  30   0   9]
 [  0 117   0   0   0   0   0]
 [100   0 202   0  14   0   1]
 [  0   0   0 597   1  31  42]
 [ 42   0  24  14 268   1  59]
 [  2   0   0  84   8 257  62]
 [  0   0   0  69  45  22 400]]

Classification Report:
              precision    recall  f1-score   support

    BARBUNYA       0.45      0.45      0.45       261
      BOMBAY       1.00      1.00      1.00       117
        CALI       0.61      0.64      0.62       317
    DERMASON       0.78      0.89      0.83       671
       HOROZ       0.73      0.66      0.69       408
       SEKER       0.83      0.62      0.71       413
        SIRA       0.70      0.75      0.72       536

    accuracy                           0.72      2723
   macro avg       0.73      0.71      0.72      2723
weighted avg       0.72      0.72      0.72      2723

With Pre-Processing

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.neighbors import KNeighborsClassifier

data = pd.read_excel('Dataset.xlsx')
print(data['Class'].value_counts())

# 1. 缺失值处理
data = data.dropna()

# 2. 异常值处理
Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1
data = data[~((data < (Q1 - 1.5 * IQR)) | (data > (Q3 + 1.5 * IQR))).any(axis=1)]

# 定义特征和目标变量
X = data.drop('Class', axis=1)
y = data['Class']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 3. 特征缩放 - 先使用 StandardScaler 进行标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 4. 特征缩放 - 使用 MinMaxScaler 进行归一化
min_max_scaler = MinMaxScaler
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值