文章目录

  • 一、数据预处理
    • 1 内容和目标:
    • 2 加载和分析数据
      • 2.1 导入基本库和加载数据
      • 2.2 分析数据
    • 3 数据清洗
      • 3.1 重复值处理
      • 3.2 数据脱敏—提取重要特征
      • 3.3 缺失值处理
      • 3.4 异常值处理
      • 3.5 标签编码或独热编码
    • 4 其他处理
      • 4.1 利用value_counts函数查看每个类别数量
      • 4.2 特征与标签组合的散点可视化
  • 二、机器学习算法
    • 1 数据归一化和划分
      • 1.1 数据归一化处理
      • 1.2 数据集划分
    • 2 算法应用
      • 2.1 算法实现
      • 2.2 算法评估与分析
        • 2.2.1 模型特征重要性andPermutation Importance
        • 2.2.2 提取特征可视化
    • 3 其他常用机器学习算法的封装(分类)

本项目使用到的数据集链接:
https://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/6tree/penguins_raw.csv

一、数据预处理

1 内容和目标:

加载给定或者自行选定的数据集,对数据进行查看和理解,例如样本数量,各特征数据类型、分布、特征和标签所表达的含义等,然后对其进行数据预处理工作,包括但不限于对敏感数据、缺失值、重复值、异常值等进行统计和处理,对标签数据进行编码,对特征进行标准化或归一化等,最终获得干净整洁的数据集以便于后续的算法模型进行处理。

2 加载和分析数据

2.1 导入基本库和加载数据

# 基础函数库
import numpy as np
import pandas as pd
# 绘图函数库
import matplotlib.pyplot as plt
import seaborn as sns

我们利用pandas自带的read_csv函数读取并转化为DataFrame格式

data = pd.read_csv('./penguins_raw.csv')

2.2 分析数据

①查看数据集大小

data.shape
## output: (344, 17) 该原始数据集包含344行(个),17列(特征)的数据。

②利用.info()查看数据的整体信息

data.info()


可以看出一共有17列,每一列的非空值个数以及值的类型。其中studyName、Species、Region、Island、Stage、Individual ID、Clutch Completion、Date Egg、Sex、Comments是分类指标、Sampe Number为整数、其他为float64类型组成,数据集样本数量为 340,数据不完整、包含缺失值。

③describe() 函数可以查看数值数据的基本情况
包括count 非空值数、mean 平均值、std 标准差、max 最大值、min 最小值、(25%、50%、75%)分位数

data.describe()


④查看前5行数据 [.head() 头部、 .tail()尾部]

data.head(5) #  data.tail(5)

3 数据清洗

3.1 重复值处理

分析数据可知,’studyName’,‘Sample Number’,'Individual ID’三个属性唯一确定一条数据。

data[data.duplicated(['studyName','Sample Number','Individual ID'])]
# data[data.duplicated()] 以全部属性为标准的缺失值
# data.drop([339]) #若存在缺失值,根据所提示出的行索引删除即可

3.2 数据脱敏—提取重要特征

为了方便我们仅选与企鹅本身关联较大的特征,经过查阅资料,我们将定量(喙长Culmen Length (mm)、喙深Culmen Depth (mm)、鳍长Flipper Length (mm)和身体质量Body Mass (g))和定性(性别Sex)特征作为输入,这些特征唯一地描述一个企鹅,输出特征为Species,将企鹅进行分类任务。

data = data[['Species', 'Culmen Length (mm)','Culmen Depth (mm)', 'Flipper Length (mm)','Body Mass (g)','Sex']]

3.3 缺失值处理

①查看数据缺失情况

data.isnull().sum()

②分析数据间的相关性

# 使用皮尔森计算特征相关矩阵
corr = data.corr(method='pearson')
# 热力图绘制相关性矩阵
sns.heatmap(data=corr, annot=True, cmap='coolwarm')


根据图中数据,可以看到缺失值特征与其它特性相关性均不大,因而通过其它特征进行填充的方案不可行,结合数据理解部分的统计结果,故直接才用均值进行填充可能更为简单直接一些。
③处理缺失值
这里我们发现数据中存在缺失值,考虑到企鹅数据的实际意义,我们不能将缺失的数据删除,故采用均值插补对连续的缺失值进行处理,对于离散的分类数据值,我们采用MALE进行填补。

data['Culmen Length (mm)']=data['Culmen Length (mm)'].fillna(data['Culmen Length (mm)'].mean())
data['Culmen Depth (mm)']=data['Culmen Depth (mm)'].fillna(data['Culmen Depth (mm)'].mean())
data['Flipper Length (mm)']=data['Flipper Length (mm)'].fillna(data['Flipper Length (mm)'].mean())
data['Body Mass (g)']=data['Body Mass (g)'].fillna(data['Body Mass (g)'].mean())
data['Sex']=data['Sex'].fillna(‘MALE’)

3.4 异常值处理

使用 3σ 法则识别异常值,并使用均值对其进行填充处理。

list = ['Culmen Length (mm)','Culmen Depth (mm)','Flipper Length (mm)','Body Mass (g)']
for i in range(len(list)):# 使用 3σ 法则识别异常值col = data[list[i]]condition = (col - col.mean()).abs() > 3 * col.std()# 显示找到的异常值indices = np.arange(col.shape[0])[condition]print(list[i])
print(col.loc[indices])

根据得出的行索引修改异常值

data.loc[[35,50],['Culmen Length (mm)']]=data['Culmen Length (mm)'].mean()

3.5 标签编码或独热编码

#  对目标值进行标签编码
target = data[‘Species']
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
data[‘Species'] = encoder.fit_transform(target) data[‘Species'].unique()
#  对Sex进行标签编码
target = data[‘Sex']
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
data[‘Sex'] = encoder.fit_transform(target) data[‘Sex'].unique()
# output:array([0, 1, 2], dtype=int64)

4 其他处理

4.1 利用value_counts函数查看每个类别数量

pd.Series(data['Species']).value_counts()


可以看到,数据集中种类是Adelie Penguin (Pygoscelis adeliae)、Chinstrap penguin (Pygoscelis antarctica)、Gentoo penguin (Pygoscelis papua)的企鹅分别有152、124、68个。

4.2 特征与标签组合的散点可视化

sns.pairplot(data=data, diag_kind='hist', hue= 'Species')
plt.show()

二、机器学习算法

经过数据预处理的数据比较完整可靠,下面我们将处理后的数据应用到算法中。

1 数据归一化和划分

1.1 数据归一化处理

for i in list(['Culmen Length (mm)','Culmen Depth (mm)','Flipper Length (mm)','Body Mass (g)']):Max=np.max(data[i])Min=np.min(data[i])data[i]=(data[i]-Min)/(Max-Min)

1.2 数据集划分

为了正确评估模型性能,将数据划分为训练集和测试集,并在训练集上训练模型,在测试集上验证模型性能,我们将训练集和测试集划分为4:1。

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(data[['Culmen Length (mm)','Culmen Depth (mm)', 'Flipper Length (mm)','Body Mass (g)', ‘Sex’]], data[['Species']], test_size = 0.2, random_state = 2022)

2 算法应用

以决策树为例,sklearn的tree模块提供了 DecisionTreeClassifier 算法的具体实现。

2.1 算法实现

## 从sklearn中导入决策树模型
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
from sklearn import metrics## 定义 决策树模型
clf = DecisionTreeClassifier()
# 在训练集上训练决策树模型
clf.fit(x_train, y_train)
## 在训练集和测试集上分布利用训练好的模型进行预测
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))## 由于决策树模型是概率预测模型(前文介绍的 p = p(y=1|x,\theta)),所有我们可以利用 predict_proba 函数预测其概率
train_predict_proba = clf.predict_proba(x_train)
test_predict_proba = clf.predict_proba(x_test)
# print('The test predict Probability of each class:\n',test_predict_proba)
## 其中第一列代表预测为0类的概率,第二列代表预测为1类的概率,第三列代表预测为2类的概率。
## 利用accuracy(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果## 查看混淆矩阵
confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
print('The confusion matrix result:\n',confusion_matrix_result)
# 利用热力图对于结果进行可视化
plt.figure(figsize=(8, 6))
sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()

2.2 算法评估与分析

2.2.1 模型特征重要性andPermutation Importance

注意!不是所有的模型都有feature_importances_属性

from sklearn.inspection import permutation_importancefearture_name=['Culmen Length (mm)','Culmen Depth (mm)', 'Flipper Length (mm)','Body Mass (g)']
feature_importance = clf.feature_importances_
sorted_idx = np.argsort(feature_importance)
pos = np.arange(sorted_idx.shape[0]) + 0.5
fig = plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.barh(pos, feature_importance[sorted_idx], align="center")
plt.yticks(pos, np.array(fearture_name)[sorted_idx])
plt.title("Feature Importance (MDI)")result = permutation_importance(clf, x_test, y_test, n_repeats=15, random_state=12, n_jobs=1
)
# print(result)
sorted_idx = result.importances_mean.argsort()
plt.subplot(1, 2, 2)
plt.boxplot(result.importances[sorted_idx].T,vert=False,labels=np.array(fearture_name)[sorted_idx],
)
plt.title("Permutation Importance (test set)")
fig.tight_layout()
plt.show()

2.2.2 提取特征可视化

from matplotlib.colors import ListedColormap
# 使用两个特征来预测,这样方便绘制预测结果
x = data[['Culmen Length (mm)','Culmen Depth (mm)']]
y = data['Species']
clf =GradientBoostingClassifier()
clf.fit(x, y)
# 创建颜色组合
cmap_light = ListedColormap(['orange', 'cyan', 'cornflowerblue'])
cmap_bold = ['darkorange', 'c', 'darkblue']
# 绘制不同类别区域
x_min, x_max = x[ 'Culmen Length (mm)'].min() - 1, x['Culmen Length (mm)'].max() + 1
y_min, y_max = x['Culmen Depth (mm)'].min() - 1, x['Culmen Depth (mm)'].max() + 1
h = .02
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
z = z.reshape(xx.shape)
plt.contourf(xx, yy, z, cmap=cmap_light)
# 绘制数据点
sns.scatterplot(x=x['Culmen Length (mm)'], y=x['Culmen Depth (mm)'], hue=y,
palette=cmap_bold, alpha=1.0, edgecolor="black")
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xlabel('Culmen Length (mm)')
plt.ylabel('Culmen Depth (mm)')
plt.title('GradientBoostingClassifier-liliangshuo-210217')
plt.show()


使用前两个特征来预测,这样方便绘制预测结果。可以看出,0和2分类的比较准确,而1相对来说不准确,符合我们的决策树分类模型预测的结果。

3 其他常用机器学习算法的封装(分类)

①逻辑回归模型

from sklearn.linear_model import LogisticRegression

②支持向量机分类

from sklearn.svm import SVC()

③MLP分类

from sklearn.neural_network import MLPClassifier

④KNN分类

from sklearn.neighbors import KNeighborsClassifier

⑤决策树分类

from sklearn.tree import DecisionTreeClassifier

⑥梯度提升决策树分类

from sklearn.ensemble import GradientBoostingClassifier

⑦随机森林分类

from sklearn.ensemble import RandomForestClassifier

《人工智能-机器学习》数据预处理和机器学习算法(以企鹅penguins数据集为例)相关推荐

  1. [机器学习]-[数据预处理]-中心化 缩放 KNN(二)

    上次我们使用精度评估得到的成绩是 61%,成绩并不理想,再使 recall 和 f1 看下成绩如何? 首先我们先了解一下 召回率和 f1. 真实结果 预测结果 预测结果   正例 反例 正例 TP 真 ...

  2. 综述:人工智能、数据科学、机器学习

    前言:学科交叉乃大势所趋,新兴学科应市场需求孕育而生.人数机,便产生在这样的时代背景下.什么,你所在的学校至今还没开设相关专业?不必惊慌,老牌资本主义国家德国同样如此.但是,学好微积分.线代.优化.统 ...

  3. 机器学习数据预处理之离群值/异常值:图像对比法

    机器学习数据预处理之离群值/异常值:图像对比法 garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的估计. 简单来说,异常值是一 ...

  4. 机器学习数据预处理之离群值/异常值:箱图法(boxplot method)

    机器学习数据预处理之离群值/异常值:箱图法(boxplot method) garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的 ...

  5. 机器学习数据预处理之离群值/异常值:MAD法(绝对值差中位数法)+绝对中位差(Median Absolute Deviation,MAD)

    机器学习数据预处理之离群值/异常值:MAD法(绝对值差中位数法)+绝对中位差(Median Absolute Deviation,MAD) garbage in,garbage out. 异常值是分析 ...

  6. 机器学习数据预处理之缺失值:预测填充(回归模型填充、分类模型填充)

    机器学习数据预处理之缺失值:预测填充(回归模型填充.分类模型填充) garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题 ...

  7. 机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值

    机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常 ...

  8. 机器学习数据预处理之缺失值:插值法填充+多项式插值

    机器学习数据预处理之缺失值:插值法填充+多项式插值 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题之一.当缺失比例 ...

  9. 机器学习数据预处理之缺失值:特征删除

    机器学习数据预处理之缺失值:特征删除 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题之一.当缺失比例很小时,可直接 ...

最新文章

  1. C++ Error: no appropriate default constructor available
  2. linux触摸板设置密码程序6,centos linux 触摸板设置
  3. MyBatis 与 Hibernate 到底哪个更快?
  4. 推荐算法炼丹笔记:序列化推荐算法SASRec
  5. python 分析html_用python的BeautifulSoup分析html
  6. 链表之单链表的反转总结
  7. rs232串口驱动_RS232与RS485在性能上有啥区别和联系?老电工总结分析,一目了然...
  8. 容器(container)技术之发展简史
  9. JDK8新特性(十五)之重复注解、类型注解
  10. vi/Vim的快速使用
  11. 快速解决Git最常见问题
  12. Ambari安装之安装并配置Ambari-server(三)
  13. mysql homedir迁移
  14. mfc 制作不同的文档模板mdi不同的子窗体_法律行业python教程——利用python批量制作律师函...
  15. phpwind升级php7,phpwind-8.7-GBK升级到phpwind-9.02-utf8步骤详解
  16. 阿里云服务器如何购买?三种购买阿里云服务器方式教程分享
  17. Modern Radar for Automotive Applications(用于汽车应用的现代雷达)
  18. Visio设计产品流程图
  19. 【电脑运用及修理】6套台式组装机电脑配置清单大全(2022年618)
  20. 赵小楼《天道》《遥远的救世主》深度解析(39)芮小丹的恋爱态度:敞亮

热门文章

  1. Origin画三维柱状图及折线
  2. cp abe java_CP-ABE基于密文策略的属性加密(JAVA源码)
  3. CUDA 学习笔记 —— (九)Stream详解
  4. 速达软件/管家婆软件/用友软件/金蝶软件/餐饮软件/财务软件数据库修复/数据初始化恢复
  5. 字节流、字符流(精细讲解)
  6. 消息在网络中的传输过程
  7. cesium入门示例-测量工具
  8. 异步神器:CompletableFuture实现原理和使用场景
  9. 泰安市康复医院5G蓝牙定位系统,医院蓝牙定位-新导智能
  10. 工具集合-脚本合并(Groovy)