【python】scikit-learn包:机器学习

news2024/11/29 2:49:07

环境配置:Scikit-learn包

只支持python语言

安装

Win+R ,输入指令:pip install -U scikit-learn

数据预处理

数据导入

借助pandas和numpy 进行数据导入与处理

字符串类label的数字化编码

机器学习的函数大部分只能对数字信息进行处理,无法对string类数据进行分析,因此需要将string类信息进行编码数字化
参考blog链接,可进行补码

Part 1. 机器学习之线性回归

问题描述

给定数据集 [x1,x2,x3,…,y],拟合y与各个因子之间的关系

内部算法的原理概述

求到最合适的y=a*x+b,使得偏差最小;即寻找a,b,使得偏差函数dif(a,b)取最小值
拟合原理:在偏差函数上,基于 “模拟退火” 算法,对a,b进行求解。

单因子拟合

求解线性方程

from sklearn.linear_model import LinearRgression
lr_model = LinearRegression()
lr_model.fit(x,y)  #这里的x和y应当是 形状为n*2的数组类型
a = lr_model.coef_
b = lr_model.intercept_

预测新数据

predictions = lr_model.predict(x_new) #x_new为一维数组

模型评估

均方误差MSE:
在这里插入图片描述

R方值:
在这里插入图片描述
MSE越小越好,R2 越接近1越好

from sklearn.metrics import mean_squared_error, r2_score
MSE = mean_squared_error(y,y_predict)
R2 = r2_score(y,y_predict)

可视化评估

from matplotlib import pyplot as plt
plt.scatter(y,y') # y和y‘差别越小,成图就越接近直线

多因子拟合 线性回归

拟合

X_multi = data.drop(['y'],axis=1) #除去y轴因子,其他因子均为影响因子
LR_multi = LinearRegression()
LR_multi.fit(X_multi,y) # 求解X_multi与y的关系

预测

y_predict_multi = LR_multi.predict(X_multi_query) # 预测值

评估

R方值:

mean_squared_error_multi = mean_squared_error(y,y_predict_multi)
r2_score_multi = r2_score(y,y_predict_multi)
print(r2_score_multi)

可视化(看y和预测y的差值情况)

fig = plt.figure(figsize=(8,5))
plt.scatter(y,y_predict_1)
plt.show()

Part 2. 机器学习之逻辑回归

问题描述

分类问题: 垃圾邮件检测、预测学生是否可以通过考试、图像分类
给定数据集,每个数据都具有多个特征要素,并给定其分类标签。该回归模型就是对 对象特征 进行识别,根据 特征、分类结果

算法逻辑

将“特征描述”进行数字化,转换成数字数据
对曲线进行拟合的方法,除了线性回归以外,还包括且不限于 分段函数、复杂函数等等.

“特征描述”数字化后,得到 特征值–分类标签 的散点图
通过与“线性回归”类似的算法原理,对“分界曲线”进行拟合
在这里插入图片描述
蓝线为拟合出的分界曲线

逻辑回归的损失函数

在这里插入图片描述

拟合、预测

from sklearn.linear_model import LogisticRegression
lr_model = LogisticRegression()
lr_model.fit(x,y) # 填入散点数据,x为特征值,y为分类标签

#分界函数 (系数计算)
theta1,theta2 = LR.coef_[0][0],LR.coef_[0][1]
theta0 = LR.intercept_[0]

#新数据的类别预测
predictions = lr_model.predict(x_new)

评估

准确率: Accuracy = 正确数 / 总数

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)

Part 3. 机器学习之聚类

KMeans: K均值聚类算法

算法定义

以空间k个点为中心进行聚类,对最靠近他们的对象归类,是最基础且最重要的聚类算法

算法流程:

step 1. 选择聚类的个数k
step 2. 随机选定这k个聚类中心的位置
step 3. 根据点到聚类中心的距离确定各个点的所属类别
step 4.根据各个类别的数据更新聚类中心(取他们的均值为新的中心)
step 5. 重复step2~step5,直至中心点不再变化

代码实现

聚类拟合

from sklearn.cluster import KMeans
KM = KMeans(n_cluster=3,random_state=0) # n_cluster=想要分为的类别数,random_state初始的随机状态
KM.fit( point ) # point为2D点集数据
centers = KM.cluster_centers_ #获取模型确定的中心点

预测

pred_label = KM.predict(  [ [8,6] ]  )
print(pred_label)

评估-准确率

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,pred_y)

类别标签矫正

y_cal = [] #矫正结果数组
for i in pred_y:
	if i == 'lable_name1':
		y_cal.append(2)
	elif i == 1:
		y_cal.append(1)
	else:
		y_cal.append(0)
print(pred_y,y_cal)

KNN算法:K nearest neighbor, K近邻分类模型

算法定义

给定样本数据集,对新的输入实例进行预测
预测方法为:在样本数据集中找到与该实例最邻近的k个样本,这k个样本中出现最多次的类别,就是这个输入实例 的被预测类别

代码实现

拟合

# 拟合
from sklearn.neighbors import KNeighborsClassifier
KNN = KNeighborsClassifier(n_neighbors=3) 
# n_neibors = 想要分为3类
KNN.fit(point,label)

预测

# 预测
pred_label = KNN.predict( [[8,6]] )
print(pred_label)
pred_label = KNN.predict( point )
print(pred_label)
## KNN模型为监督式机器学习,无需另外匹配标签

评估

# 评估
from sklearn.metrics import accuracy_score
print('accuracy:',accuracy_score(label,pred_label))

Mean-shift算法:均值漂移聚类算法

算法定义

一种基于密度梯度上升的聚类算法(沿着密度上升方向寻找聚类中心点)
就是不断地把中心点移动到点聚集的地方,但需要提前预判聚类圆的半径
在这里插入图片描述

代码实现

聚类拟合

from sklearn.cluster import MeanShift,estimate_bandwidth
# 估计聚类圆的半径
bandwidth = estimate_bandwidth( X, n_samples=500)
# X 为样本点集数据, n_samples表示样本数量 

评估-准确率

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,pred_y)

类别标签矫正

y_cal = [] #矫正结果数组
for i in pred_y:
	if i == 'lable_name1':
		y_cal.append(2)
	elif i == 1:
		y_cal.append(1)
	else:
		y_cal.append(0)
print(pred_y,y_cal)

个人想法: 我感觉可以用并查集 写一段自动匹配

Part 4. 机器学习之决策树

Decision Tree
跟深搜一个逻辑,就是多层判断,不断深搜,最终找到答案。
优点:计算量小、易于理解
缺点:忽略了属性之间的相关性:可能有几层判断,其实是相关的;如果样本分布不均匀,会很容易影响模型表现

ID3 决策树算法

算法定义

利用信息熵原理,选择信息增益最大的属性作为分类属性,递归拓展决策树的分支,完成决策树的构造

大白话就是:决策树需要有确定影响决策的“因素”有哪些,这些因素不需要人工输入,可以根据ID3算法直接获取。

代码实现

决策树实现分类

from sklearn import tree
dc_tree = tree.DecisionTreeClassifier(
	criterion='entropy',min_samples_leaf=5)
# 使用'entropy'即ID3信息熵算法,分类标签有5个
#leaf指决策树的每个叶子节点未继续分类的样本数量的最小值,leaf越小越精确度越高
dc_tree.fit( point , label)

可视化决策树

tree.plot_tree(dc_tree,filled='True',feature_names=['表头名1','表头名2','表头名3','表头名4'],class_names=['label1','label2','label3'])

其他决策树算法【待填】

C4.5决策树算法【待填】

CART决策树算法【待填】

Part 5. 机器学习之异常检测

Anomaly Detection

概念

对输入的样本数据集,对不符合预期模式的数据进行识别
实现逻辑:计算可得每个位置的概率密度,视概率密度低于一定值的点集为异常点集。
数学原理:任意分布可视为高斯分布,基于高斯分布拟合对样本数据集进行异常检测

代码实现

原始数据分布可视化

plt.hist(x1,bins=100)
#视x1的值为被观测值,划分为100个格子,查看其分布概率图
x1_mean = x1.mean() # u,正态分布的均值
x1_sigma = x1.std() # sigma 正态分布的标准差
print(x1_mean,x1_sigma)
#计算高斯分布数值
from scipy.stats import norm
import numpy as np
x1_range = np.linspace(0,20,300) #x1的范围为(0,20),有300个点
normal1 = norm.pdf(x1_range,x1_mean,x1_sigma) #对range范围内,做分布为N(mean,sigma)的高斯分布, 最终normal1为概率密度函数

plt.plot(x1_range,normal1)
#绘制出拟合的高斯分布曲线

模型训练

from sklearn.covariance import EllipticEnvelope
clf = EllipticEnvelope(
    contamination = 0.01 
    #参数contamination表示所给样本数据集的异常概率
)
clf.fit( data ) #data为被检测的数据集合

模型结果

# 异常点显示、异常行为预测
pred_label = clf.predict(data)
print(pred_label)
# 异常点值为-1,正常点值为1

异常数据可视化

#在绘制原图代码的后面,加上下列代码
anamoly_points = plt.scatter(
	data.loc[:,'x1'][y_predict==-1], # 选取值为-1的异常数据
	data.loc[:,'x2'][y_predict==-1]. # 选取值为-1的异常数据
	marker='o', #异常数据用O圈起来
	facecolor = 'red',#填充色
	edgecolor = 'red', #边线色
	s=250 #size大小
	)

Part 6. 机器学习之主成分分析

PCA

数据降维

  1. 筛除应变量 “不相关”的因变量,筛除“不相关要素”
  2. 组合“相关”元素:比如 人口、地理面积的二维数据,可以组合为 人口密度的一维数据
    注:相关不相关的依据是,概率论中的“协方差”概念

PCA算法:principal components analysis

在信息损失尽可能少的情况下,降低数据维度
在n维样本数据集中,寻找k维的新数据,实现n->k的降维。

代码实现

数据预处理
将普通正态分布转换为标准正态分布

from sklearn.preprocessing import StandardScaler
X_norm = StandardScaler().fit_transform(X)
# X为数据的原分布

获取降维数据

from sklearn.decomposition import PCA
pca = PCA(n_components=4) #降维至 4维
X_reduced = pca.fit_transform(X_norm)

观察各个要素的方差比例

var_ratio = pca.explained_variance_ratio_ 
#比例越高,相关性越高

可视化降维后的数据
借助 matplotlib 绘制 分类散点图即可

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

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

相关文章

轻量级任务看板做任务管理

利用看板管理工作和任务,可以让团队更高效,也可以一目了然的了解任务进度及问题 1、首先创建一个任务看板 使用看板工具轻量级项目模板创建一个任务看板。 任务看板内包含:列表和任务卡片,列表一般代表任务流程及状态&#xff…

(四)ArcMap基础——要素的选择

要素的选择 当要在已有的数据中选择部分要素时,ArcMap提供了三种方式:按属性选择、按位置选择及按图形选择。 目录 要素的选择一、按属性选择二、按位置选择三、按图形选择 一、按属性选择 通过设置 SQL 查询表达式,用来选择与选择条件匹配…

怎样解决高并发下的I/O瓶颈?

大家好,我是易安。 说起Java I/O,相信你一定不陌生。你可能使用I/O操作读写文件,也可能使用它实现Socket的信息传输…这些都是我们在系统中最常遇到的和I/O有关的操作。 我们都知道,I/O的速度要比内存速度慢,尤其是在现…

【致敬未来的攻城狮计划】— 连续打卡第十五天:FSP固件库外部中断处理编程(外部中断检测按键控制LED闪烁)

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

J - 在赌场玩

第一周任务 - Virtual Judge (vjudge.net) http://t.csdn.cn/rcwO7 第一周任务 - Virtual Judge (vjudge.net) 【题目描述】 然后所有玩家成对玩,每对玩家只玩一次。因此,例如,如果总共有四个玩家,则进行六场比赛:第…

真题详解(二分查找平均值)-软件设计(六十)

真题详解(数据流图平衡)-软件设计(五十九)https://blog.csdn.net/ke1ying/article/details/130394959 全码:指关系模式所有属性都是这个关系模式的候选码。 RISC特点: 指令种类:少,精简 指令…

彻底弄懂Java的泛型1 - 泛型类

Java泛型是初级程序员向中高级程序员进阶的必经之路,他不是特别难,但是想全部搞懂和会用,还是不容易的。 本文从实战角度出发,讲解你在公司做开发,可能会用到泛型的一种场景。 泛型T的用法 引子 先来看一个简单的类…

UDP 协议

目录 一、什么是协议 二、认识UDP 协议 2.2 UDP 协议的报文格式 2.3 使用UDP 协议传输大文件时的策略 2.4 UDP协议的工作流程 一、什么是协议 为了使数据在网络上传输(从源头到达目的),网络通信的参与方必须遵循相同的规则,如…

SpaceX的星舰爆炸了:产品开发,快速失败真的很重要

目录 前言 快速失败 产品生命周期 专栏上线 前言 看到很多人都在聊星舰,今天就来简单谈谈“炸星舰”带给我们的启示。 在美国中部时间20日,SpaceX公司的“星舰”超重型火箭进行了首次轨道飞行。 但在该火箭成功点火升空几分钟后,却在半…

Java-synchronized实现详解(从Java到汇编)

synchronized作为java语言中的并发关键词,其在代码中出现的频率相当高频,大多数开发者在涉及到并发场景时,一般都会下意识得选取synchronized。 synchronized在代码中主要有三类用法,根据其用法不同,所获取的锁对象也…

如何通过开源项目搭建私有云平台--第四步下:安装rancher 监控

第四步下:安装rancher 监控,缺告警 本来想监控与告警一起写,但最近几天研究了rancher的告警,按照文档说法,配置了但没有触发,网上找了一些资料,有的在rancer 2.6成功的,但我用同样的方法在2.7.…

09 【Sass语法介绍-函数指令】

1.前言 在之前的章节我们学习过 Sass 提供的各种各样的函数,那么如果我们需要自定定义函数来使用就需要用到函数指令 function了。本节内容我们来学习 Sass 函数指令的语法和使用,在 Sass 中自定义函数是必须要掌握的! 2.什么是 Sass 函数指…

又一款可视化神器,开源了!

在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的 BI 工具。 借助这些 BI 工具,我们能够大幅提升数据分析效率、生成更高质量的项目报告,让用户通过直观的数据看到结果,减低沟通成…

安卓项目如何做单元测试

前言 先说一下创建篇文章的目的,近期负责搭建公司的单元测试框架,于是查阅了网上的很多文章,以及参考了github上很多的项目例子,并且也进行了相当多的尝试。这其中花费了很多的精力,大约有两三周的时间,远…

淘系抓包流程(淘宝数据无法抓包解决方式)

淘系抓包流程 结合frida和adb工具以及mumu模拟器进行抓包。 具体的关系图: frida的安装 frida安装,直接安装官网的脚手架。frida官网使用python的pip安装,python > 3。 安装后使用查看版本命令来确认是否安装。 pip install frida-tools frida --ve…

【严重】VMware Aria Operations for Logs v8.10.2 存在反序列化漏洞(CVE-2023-20864)

漏洞描述 VMware Aria Operations for Logs前身是vRealize Log Insight,VMware用于处理和管理大规模的日志数据产品。 VMware Aria Operations for Logs 8.10.2版本中存在反序列化漏洞,具有 VMware Aria Operations for Logs 网络访问权限的未经身份验…

“SCSA-T学习导图+”系列:交换技术之STP

本期引言: 在通信工程当中,从物理层面上,我们可以采用冗余链路保证网络的健壮性。冗余是指出于系统安全和可靠性等方面的考虑,人为地对一些关键部件或功能进行重复的配置。当系统发生故障时,比如某一设备发生损坏&…

【Linux】Linux下的gbd调试,你学废了吗

操作系统核心数centos 3.10.032位单核 gbd调试方法-以线程运行时调试为例 线程死锁状态时查看栈升级gbd通过gdb在程序运行时进行调试 线程死锁状态时查看栈 在线程-线程安全之互斥中,我们自己写了一个模拟实现的线程死锁情况 我们用gbd调试查看了当前线程的调用&a…

拉链表制作

1.拉链表的应用场景 拉链表适合于:数据会发生变化,但是大部分是不变化的(即:缓慢变化维。还需要保留历史数据做分析的场景) 2.拉链表的形成过程 关键的过程 第四步:获取变化的数据(创建和修改…

Flask连接MySQL

本文章涉及到Flask框架和HTML内容,相关知识可查看链接 HTML-form表单和提交_html form 提交_小梁今天敲代码了吗的博客-CSDN博客https://blog.csdn.net/weixin_43780415/article/details/130110722 前端引入和html标签_小梁今天敲代码了吗的博客-CSDN博客https://b…