写作前言:
1.本文章的写作顺序和Chris Albon[美]《Python机器学习手册-从数据预处理到深度学习》(Machine Learning with Python Cookbook)相似。但是我会添加自己的想法和总结,并简化内容。如有侵权,请及时联系我删除文章。至此,由衷感谢该书提供指导。
2.文章篇幅比较大,文章分为以下章节:
-- 1. 向量、矩阵和数组
-- 2. 加载数据
-- 3. 数据整理
-- 4. 处理数值型数据
-- 5. 处理分类数据
-- 6. 处理文本
-- 7. 处理日期和时间
-- 8. 图像处理
-- 9. 使用特征提取进行特征降维
-- 10. 使用特征选择进行降维
-- 11. 模型评估
-- 12. 模型选择
-- 13. 线性回归
-- 14. 树和森林
-- 15. KNN
-- 16. 逻辑回归
-- 17. 支持向量机
-- 18. 朴素贝叶斯
-- 19. 聚类
-- 20. 神经网络
3.文章归纳了在机器学习中所常遇见的方法,只上应用实例。如果想要查询方法的参数以及更多的使用方法,请读者前往官方查询。
4.基于笔者能力有限以及写作文章篇幅过大,写作未免有疏漏错误,还请读者大胆提出来,笔者愿意接受读者的批评指正。
5.所有代码的运行环境基于所需模块的版本详细:
- python 3.8.8
- numpy 1.22.4
- scikit-learn 1.2.2
- pandas 1.3.5
- matplotlib 3.3.4
目录
只要涉及机器学习,首先要把原始数据加载到系统中。
在本篇介绍中,主要介绍如何引入scikit-learn中的自带的样本数据集和通过创建scikit-learn创建仿真数据集,以及从不同的源(比如SQL数据库和CSV文件)加载数据
1.使用Sklearn加载已有样本数据集
01 | 加载数据集 | sklearn.datasets模块: load_<dataset_name>()方法 | ||||||||
02 | 查看数据集属性 |
|
1.1 加载数据集
在加载数据集中,我只引入鸢尾花数据集和糖尿病数据集。
因为我们在机器学习中主要讨论的是分类问题和回归问题。
鸢尾花数据集是分类问题的常用数据集,而糖尿病数据集是做回归问题的常用数据集。
注意的是:在scikit-learn版本>1.2.0时候,scikit-learn已经剔除了波斯顿房价数据集。
""" 加载鸢尾花数据集 """
from sklearn.datasets import load_iris
""" 加载糖尿病数据集 """
from sklearn.datasets import load_diabetes
1.2 查看数据集属性
在机器学习训练中,根据有监督学习、无监督学习向模型提供数据集。
在有监督学习中,我们不仅需要提供数据特征,还要提供数据标签。
而在无监督学习中,我们仅仅需要提供数据特征。
总之,要训练一个模型,必须要向模型提供数据。
# 加载鸢尾花数据集
from sklearn.datasets import load_iris
# 读取数据
data = load_iris()
""" 查看特征名 """
print(data.feature_names)
# >>>
"""
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
"""
""" 查看特征值 """
print(data.data[:2,:])
# >>>
"""
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]]
"""
""" 查看标签名 """
print(data.target_names)
# >>>
"""
['setosa' 'versicolor' 'virginica']
"""
""" 查看标签值 """
print(data.target[:2])
"""
[0 0]
"""
2.使用Sklearn创建仿真数据集
01 | 制作用于回归的仿真数据集 | sklearn.datasets模块 make_regression()方法 |
02 | 制作用于分类的仿真数据集 | sklearn.datasets模块 make_classification()方法 |
03 | 制作用于聚类的仿真数据集 | sklearn.datasets模块 make_blobs()方法 |
2.1 制作用于回归的仿真数据集
make_regression()方法部分参数说明:
n_samples | int,可选参数,默认值为100。生成的样本数量。 |
n_features | int,可选参数,默认值为100。生成的特征数量。 |
n_informative | int,可选参数,默认值为10。生成的特征中与目标变量相关的特征数量。 |
n_targets | int,可选参数,默认值为1。生成的目标变量的数量。 |
noise | float,可选参数,默认值为0.0。生成的目标变量中的噪声标准差。 |
coef | 布尔值或数组,可选参数,默认值为False。如果为True,则返回生成数据集中使用的真实系数。如果为数组,则为生成数据集中使用的真实系数。 |
random_state | 随机数生成种子 |
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
""" 生成一个回归数据集 """
# 生成特征矩阵和目标向量以及模型系数
features,target,coefficients = make_regression(n_samples = 100,
n_features = 1,
n_informative = 1,
n_targets = 1,
noise = 8.0,
coef = True,
random_state = 1)
# 绘制散点图
plt.scatter(features,target,c="b")
plt.show()
2.2 制作用于分类的仿真数据集
make_classification()方法部分参数说明:
n_samples | int,可选参数,默认值为100。生成的样本数量。 |
n_features | int,可选参数,默认值为20。生成的特征数量。 |
n_informative | int,可选参数,默认值为2。生成的特征中与目标变量相关的特征数量。 |
n_redundant | int,可选参数,默认值为2。冗余特征的数量 |
n_classes | int,可选参数,默认值为2。分类问题的类(或标签)的数量 |
weights | array,分配给每个类别的样本比例 |
random_state | 随机数生成种子 |
from sklearn.datasets import make_classification
""" 生成一个分类数据集 """
# 生成特征矩阵和目标向量
features,target = make_classification(n_samples = 100,
n_features = 5,
n_informative = 5,
n_redundant = 0,
n_classes = 3,
weights=[0.25,0.5,0.5],
random_state = 1)
# 打印特征信息
print(features[:3,:])
# >>>
"""
[[-2.03228386 0.27313379 -1.24704667 3.0319683 1.25218447]
[ 2.29413366 -0.21846466 -0.07442589 2.14384983 -0.15831911]
[-1.52542531 -0.0425736 -0.76663616 2.29348162 0.61417686]]
"""
# 打印标签信息
print(target[:10])
# >>>
"""
[2 0 2 2 1 2 0 1 0 1]
"""
2.3 制作用于聚类的仿真数据集
make_blobs()方法部分参数说明:
n_samples | int,可选参数,默认值为100。生成的样本数量。 |
n_features | int,可选参数,默认值为2。生成的特征数量。 |
centers | float,可选参数,默认值为2。生成的特征中与目标变量相关的特征数量。 |
cluster_std | int,可选参数,默认值为1.0。聚类的标准偏差 |
shuffle | bool,可选参数,默认值为True。打乱样本 |
random_state | 随机数生成种子 |
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
""" 生成一个聚类数据集 """
# 生成特征矩阵和目标向量
features,target = make_blobs(n_samples = 100,
n_features = 2,
centers = 5,
cluster_std = 0.5,
shuffle = True,
random_state = 1)
# 绘制散点图
plt.scatter(features[:,0],features[:,1],c=target)
plt.show()
3.使用pandas读取外部数据集
01 | 加载CSV文件 | read_csv()方法 |
02 | 加载EXCEL文件 | read_excel()方法 |
03 | 查询MySQL数据库 | read_sql()方法 |
3.1 加载CSV文件
import pandas as pd
""" 加载csv文件 """
dataframe = pd.read_csv("./nba.csv",encoding="gbk")
# 查看前两行数据
print(dataframe.iloc[:2,:])
# >>>
"""
Name Team Number ... College Salary Love
0 Avery Bradley Boston Celtics 0 ... Texas 7730337 Yes
1 Jae Crowder Boston Celtics 99 ... Marquette 6796117 Yes
[2 rows x 10 columns]
"""
3.2 加载EXCEL文件
read_excel()方法部分参数说明:
sheet_name | int,可选参数,默认是0,指定加载的表 |
header | int,可选参数,默认是0,指定表头 |
import pandas as pd
""" 加载excel文件 """
dataframe = pd.read_excel("./nba.xlsx",sheet_name=0,header=0)
# 查看前两行数据
print(dataframe.iloc[:2,:])
# >>>
"""
Name Team Number ... College Salary Love
0 Avery Bradley Boston Celtics 0 ... Texas 7730337 Yes
1 Jae Crowder Boston Celtics 99 ... Marquette 6796117 Yes
[2 rows x 10 columns]
"""
3.3 查询MySQL数据库
import pandas as pd
import MySQLdb
# 连接MySQL数据库
conn = MySQLdb.connect(host='127.0.0.1', user='root', password='root', db='environment')
""" 加载MySQL数据库 """
query = "select * from checkenv_daycom"
dataframe = pd.read_sql(query, conn)
# 关闭数据库连接
conn.close()
# 打印数据
print(dataframe)
# >>>
"""
id day temperature airHumidity
0 1 0 25 80
1 2 1 25 80
2 3 2 29 86
3 4 3 30 61
4 5 4 25 80
5 6 5 27 86
6 7 6 25 80
"""