【深耕 Python】Data Science with Python 数据科学(17)Scikit-learn机器学习(二)

news2024/10/6 6:48:53

写在前面

关于数据科学环境的建立,可以参考我的博客:

【深耕 Python】Data Science with Python 数据科学(1)环境搭建

往期数据科学博文一览:

【深耕 Python】Data Science with Python 数据科学(2)jupyter-lab和numpy数组

【深耕 Python】Data Science with Python 数据科学(3)Numpy 常量、函数和线性空间

【深耕 Python】Data Science with Python 数据科学(4)(书337页)练习题及解答

【深耕 Python】Data Science with Python 数据科学(5)Matplotlib可视化(1)

【深耕 Python】Data Science with Python 数据科学(6)Matplotlib可视化(2)

【深耕 Python】Data Science with Python 数据科学(7)书352页练习题

【深耕 Python】Data Science with Python 数据科学(8)pandas数据结构:Series和DataFrame

【深耕 Python】Data Science with Python 数据科学(9)书361页练习题

【深耕 Python】Data Science with Python 数据科学(10)pandas 数据处理(一)

【深耕 Python】Data Science with Python 数据科学(11)pandas 数据处理(二)

【深耕 Python】Data Science with Python 数据科学(12)pandas 数据处理(三)

【深耕 Python】Data Science with Python 数据科学(13)pandas 数据处理(四):书377页练习题

【深耕 Python】Data Science with Python 数据科学(14)pandas 数据处理(五):泰坦尼克号亡魂 Perished Souls on “RMS Titanic”

【深耕 Python】Data Science with Python 数据科学(15)pandas 数据处理(六):书385页练习题

【深耕 Python】Data Science with Python 数据科学(16)Scikit-learn机器学习(一)

代码说明: 由于实机运行的原因,可能省略了某些导入(import)语句。

本期博客为Scikit-learn机器学习的最入门之介绍,更深入的理解和应用请待后续更新。本期内容开始之前,首先分享一则机器学习相关的名人名言。

名人名言
【匈牙利】约翰·冯·诺伊曼,计算科学之父 John von Neumann 1903-1957
在这里插入图片描述

“With four parameters I can fit an elephant, and with five I can make him wiggle his trunk.”
“给我四个参数,我可以拟合出一头大象;给我五个参数,我可以让他甩动他的象鼻。”

一、读取数据表格

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

URL = "https://learnenough.s3.amazonaws.com/titanic.csv"
titanic = pd.read_csv(URL)

二、导入机器学习模型

Scikit-learn提供的机器学习模型(部分,附介绍链接):

逻辑斯蒂回归 Logistic Regression

朴素贝叶斯 Naive Bayes

感知机 Perceptron

决策树 Decision Tree

随机森林 Random Forest

导入上述机器学习模型:

from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import Perceptron
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier

三、数据预处理

将除了舱级Pclass性别Sex年龄Age生还Survived之外的列全部去除:

dropped_columns = ["PassengerId", "Name", "Cabin", "Embarked", "SibSp", "Parch", "Ticket", "Fare"]
for column in dropped_columns:
    titanic = titanic.drop(column, axis=1)

然后,将剩余列中的NaNNaT值去除:

for column in ["Age", "Sex", "Pclass"]:
    titanic = titanic[titanic[column].notna()]

还需将分类变量(Categorical Variable),比如性别,映射为数值变量(Numerical Variable):

sexes = {"male": 0, "female": 1}
titanic["Sex"] = titanic["Sex"].map(sexes)

准备自变量和因变量:

X = titanic.drop("Survived", axis=1)
Y = titanic["Survived"]

观察自变量和因变量的数据结构:

print(X.head(), "\n----\n")
print(Y.head(), "\n----\n")

程序输出:

# 3个自变量
   Pclass  Sex   Age
0       3    0  22.0
1       1    1  38.0
2       3    1  26.0
3       1    1  35.0
4       3    0  35.0 
----

# 因变量
0    0
1    1
2    1
3    1
4    0
Name: Survived, dtype: int64 
----

接下来,将原数据划分为训练集和测试集,需导入 train_test_split() 方法:

from sklearn.model_selection import train_test_split

(X_train, X_test, Y_train, Y_test) = train_test_split(X, Y, random_state=1)

四、定义、训练和评估模型

逻辑斯蒂回归模型

logreg = LogisticRegression()
logreg.fit(X_train, Y_train)
accuracy_logreg = logreg.score(X_test, Y_test)

(高斯)朴素贝叶斯模型

naive_bayes = GaussianNB()
naive_bayes.fit(X_train, Y_train)
accuracy_naive_bayes = naive_bayes.score(X_test, Y_test)

感知机模型

perceptron = Perceptron()
perceptron.fit(X_train, Y_train)
accuracy_perceptron = perceptron.score(X_test, Y_test)

决策树模型

decision_tree = DecisionTreeClassifier()
decision_tree.fit(X_train, Y_train)
accuracy_decision_tree = decision_tree.score(X_test, Y_test)

随机森林模型

random_forest = RandomForestClassifier()
random_forest.fit(X_train, Y_train)
accuracy_random_forest = random_forest.score(X_test, Y_test)

模型评估:

results = pd.DataFrame({
    "Model": ["Logistic Regression", "Naive Bayes", "Perceptron",
              "Decision Tree", "Random Forest"],
    "Score": [accuracy_logreg, accuracy_naive_bayes, accuracy_perceptron,
              accuracy_decision_tree, accuracy_random_forest]
})

result_df = results.sort_values(by="Score", ascending=False)
result_df = result_df.set_index("Score")
print(result_df)

模型准确率:

# 准确率        模型               
Score           Model                        
0.854749        Decision Tree
0.854749        Random Forest
0.787709  Logistic Regression
0.770950          Naive Bayes
0.743017           Perceptron

对随机森林模型中的3个因素的权重进行分析并绘制柱状图:

print(random_forest.feature_importances_)
print(X_train.columns)
fig, ax = plt.subplots()
ax.bar(X_train.columns, random_forest.feature_importances_)
plt.title("Factor Importance of Random Forest")
plt.ylabel("Importance")
plt.grid()
plt.show()

程序输出:

[0.17858357 0.35377705 0.46763938]
Index(['Pclass', 'Sex', 'Age'], dtype='object')

在这里插入图片描述

五、交叉验证

对随机森林模型进行K折交叉验证(默认值为K=5):

from sklearn.model_selection import cross_val_score

random_forest = RandomForestClassifier(random_state=1)
scores = cross_val_score(random_forest, X, Y)
print(scores)
print(scores.mean())
print(scores.std())

程序输出:

[0.75524476 0.8041958  0.82517483 0.83216783 0.83098592]  # 5次交叉验证
0.8095538264552349  # 平均准确率
0.028958338744358988  # 标准差

参考文献 Reference

《Learn Enough Python to be Dangerous——Software Development, Flask Web Apps, and Beginning Data Science with Python》, Michael Hartl, Boston, Pearson, 2023.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1638209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c#word文档:1.创建空白Word文档及保存/2.添加页内容...

---创建空白Word文档 --- (1)创建一个名为OfficeOperator的类库项目。引用操作Word的.NET类库 (2)定义用于操作Word的类WordOperator1。添加引用Microsoft.Office.Interop.Word命名空间。 (3)为WordOper…

劳动节不劳动!陕西程序员手把手带你度假,领略祖国大好河山!

文章大纲 5 天 4 晚 陕西小环线错峰 放松度假遛娃天师堂石门栈道关山牧场草原九龙山温泉扶风温泉 想起一些旧事, 那时候搞IT比现在欢乐很多参考文献 秉承劳动节不劳动的一贯做法,节前我就带娃出来了,想着劳动节当天就能返回西安,不…

礼赞劳动节,致敬劳动者。节日随想:疾笔耕耘也是一种劳动方式。

马克思也快诞辰了206年了,恩格斯领导的第二国际通过的决议节日也迎来了134岁的生日了,我也继续在劳动的路上。 五月是值得纪念的日子,作为一名无上光荣的分子,无比仰慕崇拜的两位先驱前辈大胡子,其一 生于斯&#xff0…

数据可视化宝典:Matplotlib图形实战

在数据分析领域,图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形,并附上相应的代码示例,可以当初matplotl…

mac如何打开exe文件?如何mac运行exe文件 如何在Mac上打开/修复/恢复DMG文件

在macOS系统中,无法直接运行Windows系统中的.exe文件,因为macOS和Windows使用的是不同的操作系统。然而,有时我们仍然需要运行.exe文件,比如某些软件只有Windows版本,或者我们需要在macOS系统中运行Windows程序。 虽然…

Python中的观察者模式及其应用

观察者模式是设计模式之一,实现一对多依赖,当主题状态变化时通知所有观察者更新。在Python中,通过自定义接口或内置模块实现观察者模式,可提高程序灵活性和扩展性,尤其适用于状态变化时触发操作的场景,如事…

JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)

目录 前言 详细图解 代码部分 前言 查找算法中,首要讨论的是基本查找,也就是顺序查找,在数据量特别大的时候,基本查找这种从前往后挨个找的形式,性能是很差的! 所以为了提高一些性能,产生了…

MyBatis中的#{} 和 ${}

目录 #{} 和 ${} 预编译 SQL 和 即时 SQL SQL注入 ${}的使用 #{} 和 ${}的使用 MyBatis参数赋值有两种方式,在上一篇文章中,一直使用 #{} 进行赋值,接下来,我们来使用 ${} 进行赋值,并观察 #{} 和 ${} 的区别 使用…

操作系统:线程

目录 前言: 1.线程 1.1.初识线程 1.2.“轻量化”进程 1.3.线程与进程 2.线程控制 2.1.pthread原生线程库 2.2.线程控制的接口 2.2.1.线程创建 2.2.线程退出|线程等待|线程分离|线程取消 2.3.pthread库的原理 2.4.语言和pthread库的关系 2.5.线程局部…

【leetcode】快慢指针相关题目总结

141. 环形链表 判断链表是否有环:如果链表中存在环,则在链表上不断前进的指针会一直在环里绕圈子,且不能知道链表是否有环。使用快慢指针,当链表中存在环时,两个指针最终会在环中相遇。 /*** Definition for singly-…

L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到一个处理错误。

一、首先这个问题,有一定概率出现(已确认) 1.使用后未将其断开或者频繁连接断开,导致注册表出现异常。(目前推断是这样的) 2.系统网卡驱动问题,需要进行网络重置,卸载网卡驱动后重新…

自动化机器学习——网格搜索法:寻找最佳超参数组合

自动化机器学习——网格搜索法:寻找最佳超参数组合 在机器学习中,选择合适的超参数是模型调优的关键步骤之一。然而,由于超参数的组合空间通常非常庞大,手动调整超参数往往是一项耗时且困难的任务。为了解决这个问题,…

基于Springboot的社区医疗服务系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的社区医疗服务系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

Unity LineRenderer 入门

概述: 如果你在你项目中需要一些渲染线条的效果,在3D场景中,渲染一个线条出来(比如路线图,激光射线,标记点)等效果,那这部分的学习一定不要错过喔。 Line Renderer(线条…

ECHARTS学习

坐标轴 option {xAxis: {type: category,data: [A, B, C]},yAxis: {type: value},series: [{data: [120, 200, 150],type: line}] }; 1、坐标轴的默认类型type是数值型,而xAxis指定了类目型的data,所以Echarts也能识别出这是类目型的坐标轴,…

第八篇:隔离即力量:Python虚拟环境的终极指南

隔离即力量:Python虚拟环境的终极指南 1 引言 在编程的多元宇宙中,Python语言犹如一颗闪耀的星辰,其魅力不仅仅在于简洁的语法,更在于其庞大而繁荣的生态系统。然而,随着应用的增长和复杂性的提升,开发者们…

手搓带头双向循环链表(C语言)

目录 List.h List.c ListTest.c 测试示例 带头双向循环链表优劣分析 List.h #pragma once#include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int LTDataType;typedef struct ListNode {struct ListNode* prev;struct ListNode* next…

上位机图像处理和嵌入式模块部署(树莓派4b读写json数据)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;ini文件是用来进行配置的&#xff0c;数据库是用来进行数据存储的。那json是用来做什么的呢&#xff0c;json一般是用来做…

[HNOI2003]激光炸弹

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二维前缀和板题。 注意从&#xff08;1,1&#xff09;开始存即可&#xff0c;所以每次输入x,y之后&#xff0c;要x,y。 因为m的范围最大为…

使用Neo4j和Langchain创建知识图谱

使用Neo4j和Langchain创建知识图谱 知识图谱是组织和整合信息的强大工具。通过使用实体作为节点和关系作为边缘&#xff0c;它们提供了一种系统的知识表示方法。这种有条理的表示有利于简化查询、分析和推理&#xff0c;使知识图在搜索引擎、推荐系统、自然语言处理和人工智能…