使用Python实现数据挖掘与机器学习:以鸢尾花分类为例
在当今数字化时代,数据挖掘和机器学习技术已经渗透到各个领域。从金融风险预测、医疗诊断辅助到个性化推荐系统等,这些技术都发挥着不可替代的作用。本文将通过一个经典的数据集——鸢尾花数据集(Iris dataset),来介绍如何使用Python进行数据挖掘和机器学习的完整流程,包括数据预处理、特征工程、模型选择以及评估。
环境搭建与数据获取
安装必要的库我们需要安装一些常用的Python库来进行数据挖掘和机器学习任务。可以使用pip工具来安装:import pippip install numpy pandas scikit-learn matplotlib seaborn
这里numpy
用于数值计算,pandas
用于数据处理,scikit - learn
是机器学习库,matplotlib
和seaborn
用于数据可视化。加载鸢尾花数据集Scikit - learn自带了鸢尾花数据集,我们可以很方便地加载它。from sklearn.datasets import load_irisimport pandas as pd
iris = load_iris()df = pd.DataFrame(data=iris.data, columns=iris.feature_names)df['target'] = iris.targetprint(df.head())
- 输出结果会显示前几行数据,其中包含四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和目标变量(不同种类的鸢尾花)。## 数据探索与预处理1. **数据探索** - 首先查看数据的基本信息,如数据类型、缺失值情况等。```pythonprint(df.info())print(df.describe())
info()
方法可以查看每个特征的数据类型以及是否有缺失值,describe()
方法可以得到数值型特征的一些统计信息,如均值、标准差、最大最小值等。数据可视化为了更好地理解数据,我们绘制一些图表。例如,绘制箱线图来查看各特征的分布情况。import seaborn as snsimport matplotlib.pyplot as plt
sns.boxplot(data=df[iris.feature_names])plt.show()
- 箱线图能够直观地显示出数据的离群点、中位数、上下四分位数等信息。还可以绘制散点图矩阵来观察不同特征之间的关系。```pythonsns.pairplot(df, hue='target')plt.show()
数据预处理在这个数据集中没有缺失值,但我们需要对目标变量进行编码转换。因为原始的目标变量是以数字表示类别(0,1,2),为了方便后续建模,可以将其转换为字符串标签。def target_to_label(target):label_dict = {0: 'setosa', 1: 'versicolor', 2: 'virginica'}return label_dict[target]
df['species'] = df['target'].apply(target_to_label)print(df[['species','target']].head())
## 特征工程1. **特征缩放** - 对于某些机器学习算法来说,不同量级的特征可能会导致模型性能不佳。因此,我们可以对特征进行标准化处理,使其均值为0,方差为1。```pythonfrom sklearn.preprocessing import StandardScalerscaler = StandardScaler()df_scaled = df.copy()df_scaled[iris.feature_names] = scaler.fit_transform(df[iris.feature_names])print(df_scaled.head())
特征选择在这个简单的例子中,所有特征都是有用的。但在实际应用中,可能需要根据相关性分析或者基于模型的特征重要性评估来选择重要的特征。这里我们可以通过计算特征之间的相关系数矩阵来简单地看一下特征之间的关系。corr_matrix = df_scaled[iris.feature_names].corr()print(corr_matrix)
模型构建与训练
划分训练集和测试集为了评估模型的性能,需要将数据集划分为训练集和测试集。from sklearn.model_selection import train_test_split
X = df_scaled[iris.feature_names]y = df_scaled['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
2. **选择并训练模型** - 这里我们选择逻辑回归模型作为示例。```pythonfrom sklearn.linear_model import LogisticRegressionmodel = LogisticRegression(max_iter=200)model.fit(X_train, y_train)
模型评估
准确率评估计算模型在测试集上的准确率。from sklearn.metrics import accuracy_score
y_pred = model.predict(X_test)accuracy = accuracy_score(y_test, y_pred)print(f'Accuracy: {accuracy}')
2. **混淆矩阵** - 混淆矩阵可以更详细地展示模型的分类效果。```pythonfrom sklearn.metrics import confusion_matrixcm = confusion_matrix(y_test, y_pred)print(cm)
通过以上步骤,我们完成了一个完整的鸢尾花分类的机器学习项目。当然,在实际应用中,还需要不断优化模型,例如尝试不同的算法、调整超参数等。