手把手教你完成自己的第一个机器学习项目

目录

项目工具介绍

前置操作

Python安装及配置

添加所需要的库函数

机器学习建模

建模流程

实战代码讲解

        1.  导入库函数

        2. 数据读取,检查数据的特征,查看有无缺失值,重复值,异常值

        3. 数据预处理,删除无用列,处理缺失值

        4. 建立标签

        5. 划分数据集

        6. 数据标准化

        7. 模型实例化

        8. 模型预测

        9. 模型评估

小结

完整代码


项目工具介绍

演示工具:Python3.8, Windows11,Anaconda,Jupyter notebook

Requirementsscikit-learn,pandas

演示数据集:Kaggle开源Titanic数据集,下载地址Titanic

前置操作

Python安装及配置

前往官网Python.org下载,推荐版本为3.6 - 3.10,对某些库兼容性更好一些,例如TensorFlow

安装完进行添加Python环境变量,以便今后可以在cmd中直接使用Python。以win11系统为例,右击“此电脑”,点击属性,在设置中点击高级系统设置--->高级--->环境变量--->Path,在Path里新建两个变量,两个path里都添加:

第一个添加Python文件中的scripts文件夹,默认Python安装路径在C:\Users\此处是你电脑的用户名\AppData\Local\Programs\Python\你的Python版本\Scripts\

第二个添加Python主文件夹,即C:\Users\此处是你电脑的用户名\AppData\Local\Programs\Python\你的Python版本\

添加所需要的库函数

        在进行建模之前,我们要先将建模时用到的库函数下载进来,以便后续直接调用。首先同时按住键盘上的win键和R键,输入cmd按回车进入到命令行。在命令行中输入以下命令进行下载,使用清华镜像源来加速下载。

pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

此处若报错,大概率是上一步Python环境变量没配置好,建议仔细检查!

机器学习建模

建模流程

        一套完整的建模的具体流程大概分为10步数据读取,数据预处理,建立标签,划分数据集,特征工程,模型实例化,模型预测,模型评估,模型调优,模型解释。

        此演示中,特征工程、模型调优与模型解释部分不做演示,后续会更新相关文章进行补充。

实战代码讲解

       1.  导入库函数

import pandas as pd  # 数据读取
from sklearn.preprocessing import StandardScaler  # 用于标准化数据
from sklearn.model_selection import train_test_split  # 用于划分数据集
from sklearn.svm import SVC  # 使用支持向量机进行建模预测
from sklearn.metrics import (accuracy_score, recall_score, precision_score,
                             f1_score, confusion_matrix)  # 模型评价指标
import warnings
warnings.filterwarnings('ignore')

        2. 数据读取,检查数据的特征,查看有无缺失值,重复值,异常值

df = pd.read_csv('单引号里替换为数据集的路径', encoding='utf-8')
print(df.head(5))

        通过输出数据集的前五行可以看出该数据集一共有28列数据,特征有乘客id,年龄,费用,性别,以及一堆zero列。这些zero列就是异常值。

        接着检查数据集是否存在重复值与缺失值,通过输出后可看出,仅Embarked列含两个缺失值。

duplicates = df.duplicated().sum()  # 检查是否存在重复值
missing_value = df.isna().sum()  # 检查是否存在缺失值
print(f'重复值数量为:{duplicates}\n')
print(f'缺失值数量为:\n{missing_value}')

         3. 数据预处理,删除无用列,处理缺失值

        由第二步我们得知zero列是无用列,需要将其删去,使用DataFrame类型的drop方法执行删除操作,参数解释['zero']表示要删除的索引,inplace=True即直接在df表格中进行操作,axis=1表示按纵轴方向索引

for i in range(0, 19):
    if i == 0:
        df.drop(['zero'], inplace=True, axis=1)
    else:
        df.drop([f'zero.{i}'], inplace=True, axis=1) 
print(df.columns)

        接下来处理Embarked列的缺失值,我们此处采用 'ffill' 方法,即缺少的值将由同一列中上一行的值进行填充。

df['Embarked'].fillna(method='ffill', inplace=True)
embarked_missing = df['Embarked'].isna().sum()
print(f'Embarked列的缺失值数量为:{embarked_missing}')

        4. 建立标签

        标签的确定是根据不同的任务来选择的,特征变量(自变量)作为作为我们的输入特征X,预测变量(因变量)作为我们的标签y。此处我们的输入特征为Age, Fare, Sex, sibsp, Parch, Pclass, Embarked, 预测变量为 2urvived。

X = df.drop(['Passengerid', '2urvived'], axis=1)
y = df['2urvived']
print(X.shape)

     处理后X的大小为(1309, 7),表示我们有1309个样本,7个特征变量。

        5. 划分数据集

        我们通常将数据集按照8:2或者7:3的比例划分为训练集与测试集,或者按照6:2:2或7:2:1的比例划分为训练集、验证集与测试集。此处我们按照7:3的比例划分数据集,通过设置随机种子的值来实现模型性能的可复现。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
print(f'训练集的数量为:{y_train.shape}')
print(f'测试集的数量为:{y_test.shape}')

        划分后训练集含916个样本,测试集样本数量为393例。

        6. 数据标准化

        为了减小各特征数值大小分布范围不同,造成模型偏向某些特征的情况,我们可以通过对特征变量进行标准化,将每一种特征的分布都变为0-1之间,从而获得更好的模型性能。

std = StandardScaler()
X_train = std.fit_transform(X_train)
X_test = std.transform(X_test)

         7. 模型实例化

        经过上面这么多操作之后,现在我们可以开始构建模型了,模型的构建十分简单,先实例化模型,并设置模型的超参数,接下来就可以进行训练了。

svm = SVC(C=1, gamma=0.1, kernel='rbf')
svm.fit(X_train, y_train)

         8. 模型预测

y_pred = svm.predict(X_test)
print(y_pred)

        9. 模型评估

        混淆矩阵是评估分类模型的性能的最常用指标,其表示分类任务中模型预测结果与真实标签之间的关系。混淆矩阵的格式为:

\begin{bmatrix} TN & FP\\ FN&TP \end{bmatrix}

        TN表示真实标签为负类且预测为负类的样本数;

        FP表示真实标签为负类但预测为正类的样本数;

        FN表示真实标签为正类但预测为负类的样本数;

        TP表示真实标签为正类且预测为正类的样本数。

        模型评价的常用指标为准确率(Accuracy),召回率(Recall),精确度(Precision)和f1分数。

        准确率是分类正确的样本占总样本的比例,计算如下:

        召回率是实际为正类的样本中,被正确预测为正类的比例,计算如下:

         精确度是预测为正类的样本中,真实为正类的比例,计算如下:

       

         F1 分数是精确率和召回率的调和平均,反映recall和precision的综合性能,计算如下:

         代码实现如下:

# 混淆矩阵计算
confusion = confusion_matrix(y_test, y_pred)
print(confusion)

# 指标计算
accuracy = accuracy_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print(f'accuracy={accuracy}, recall={recall},precision={precision}, f1={f1}')

小结

        对初学机器学习的萌新,千万不要硬啃模型处理的具体算法,只用掌握模型的应用方法和各模型的超参数设置,学会应用即可。想入门机器学习的话,其相关的库函数的使用方法也很重要,例如pandas,numpy和matplotlib,pandas用于进行数据集操作,numpy用于进行矩阵转换和运算,matplotlib用于可视化模型性能,制作出各种漂亮好看的图。

       本文进行的是二分类任务,关于回归和多分类任务的讲解,如果反响的人多的话笔者会考虑再写一篇补充。

        机器学习实战项目也可以到Kaggle网站上,下载数据集进行自己建模分析,想要学好的话一定要多动手实操,干看理论知识的话不推荐哦~

完整代码

# coding=utf-8
import pandas as pd  # 数据读取
from sklearn.preprocessing import StandardScaler  # 用于标准化数据
from sklearn.model_selection import train_test_split  # 用于划分数据集
from sklearn.svm import SVC  # 使用支持向量机进行建模预测
from sklearn.metrics import (accuracy_score, recall_score, precision_score,
                             f1_score, confusion_matrix)  # 模型评价指标
import warnings
warnings.filterwarnings('ignore')

# 读取数据集
df = pd.read_csv('train_and_test2.csv', encoding='utf-8')
# print(df.head(5))

# 查询缺失值、重复值、异常值
duplicates = df.duplicated().sum()  # 检查是否存在重复值
missing_value = df.isna().sum()  # 检查是否存在缺失值
# print(f'重复值数量为:{duplicates}\n')
# print(f'缺失值数量为:\n{missing_value}')

# 删除zero列
for i in range(0, 19):
    if i == 0:
        df.drop(['zero'], inplace=True, axis=1)
    else:
        df.drop([f'zero.{i}'], inplace=True, axis=1)
# print(df.columns)

# 对缺失值进行向前填充
df['Embarked'].fillna(method='ffill', inplace=True)
embarked_missing = df['Embarked'].isna().sum()
# print(f'Embarked列的缺失值数量为:{embarked_missing}')

# 建立标签
X = df.drop(['Passengerid', '2urvived'], axis=1)
y = df['2urvived']
# print(X.shape)

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# print(f'训练集的数量为:{y_train.shape}')
# print(f'测试集的数量为:{y_test.shape}')

# 数据标准化
std = StandardScaler()
X_train = std.fit_transform(X_train)
X_test = std.transform(X_test)

# 实例化SVM
svm = SVC(C=1, gamma=0.1, kernel='rbf')
svm.fit(X_train, y_train)

y_pred = svm.predict(X_test)  # 模型预测

# 计算混淆矩阵
confusion = confusion_matrix(y_test, y_pred)
print(confusion)

# 计算模型评价指标
accuracy = accuracy_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print(f'accuracy={accuracy}, recall={recall},precision={precision}, f1={f1}')

~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值