【Python数据分析】SKlearn统计与机器学习,看这一篇就够了!
Scikit-learn,简称为SKlearn,是一个开源项目,也是当今最常用的机器学习 (ML)库之一。它是一组简单有效的工具集,它依赖于Python的NumPy、SciPy和matplotlib。它提供了估计机器学习统计模型的功能,包括回归、降维、分类和聚类模型等功能。
| 内容 | 应用 | 算法 |
|---|---|---|
| 回归 | 价格预测、趋势预测等 | 线性回归、SVR等 |
| 降维 | 可视化 | PCA、NMF等 |
| 分类 | 异常检测、图像识别等 | KNN、SVM等 |
| 聚类 | 图像分割、群体划分等 | K-means等 |
SKlearn的主要功能
主要分为六大部分:分类、回归、聚类、数据降维、模型选择和数据预处理
1.分类
是对给定对象指定所属类别。分类属于监督学习。
2.回归
是一项预测性的建模技术。目的是通过建立模型研究因变量和自变量之间的显著关系,即多个自变量对应变量的影响强度,预测数值型的目标值。
3.聚类
是自动识别具有相似属性的给定对象,并将其分组为集合。聚类属于无监督学习。
4.数据降维
数据降维是用来减少随机数量个数的方法,常用于可视化处理、效率提升的应用场景中。
5.模型选择
是对给定参数和模型的比较、验证和选择的方法。模型选择的目的是通过参数调整来提升精度。
6.数据预处理
数据预处理是提高数据质量的有效方法,包括数据清理(清楚数据噪声并纠正不一致)、数据集成(将多个数据源合并成一致数据存储)、数据规约(通过聚集、删除冗余特征或聚类等方法降级数据规模)和数据变换(数据规范化)。
回归分析
回归分析是一项预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。
具体来说,回归分析是指利用数据统计原理,对大量统计数据进行数学处理,并确定因变量与某些自变量之间的相关关系,建立一个相关性较好的回归方程,并加以外推,用于预测今后因变量变化的分析。
我们要得到的是一个普适性的回归方程,即当我们扩大定义域的时候,这个回归方程也应该使用。
回归分析的主要过程和步骤如下: (1)收集一组包含自变量和因变量的数据 (2)根据它们之间的关系,初步设定回归模型 (3)求解合理的回归系数 (4)进行相关性检验,确定相关系数 (5)利用模型对因变量做出预测或解释,并计算预测值的置信区间
1.一元线性回归方法
根据自变量x和因变量y的相关关系,建立x与y的线性回归方程进行预测的方法。
基于实际情况,市场现象一般会受多种因素的影响,所以我们不能只考虑其中之一因素,而是要做全面分析,然后针对其中影响作用明显高于其他所有因素的变量,才能当作自变量来进行线性回归方程的组建。
算法原理
自变量x和因变量y有以下类似的数学关系:
y = f(x,θ) + α
其中:f 是满足一定条件的函数,称为回归函数;θ 为参数,称为回归模型参数;α 为随机变量,称为误差项或扰动项,反映除了x 和 y 的线性关系之外其他因素对 y 的影响,它不会受 x 和 y 之间线性关系的影响。
对于 θ ,它是个未知数,我们要得到它,就必须要从总体样本中抽样获得数据,然后使用最小二乘法、矩方法或者极大似然方法来获得。
我们常用最小二乘法:通过最小化误差的平方和寻找数据的最佳函数匹配。普通最小二乘法是最直观的估计方法。
我们通过上述关系得到了样本回归线之后,就可以使用它代替总体的回归线,是一种以小见大的做法。但是对于参数估计值和真实值差异到底有多少,还是不能忽略的,所以通常有例如拟合优度检验、变量显著性检验和残差标准差检验等方法。
做大于说,我们来使用SKlearn自身提供的Load_iris()数据集来进行数据分析的实践。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.linear_model import LinearRegression
iris = load_iris()
data = pd.DataFrame(iris.data)
data.columns = ['sepal - length','sepal - width','petal - length','petal - width']
# 使用sklearn对花萼宽度和长度进行一元线性回归分析
# 将 x 和 y 转换为二维数组
x = data['petal - length'].values.reshape(-1, 1)
y = data['petal - width'].values
# 创建线性回归模型并拟合数据
model = LinearRegression()
model.fit(x, y)
# 获取回归系数和截距
slope = model.coef_[0]
intercept = model.intercept_
print(f"回归系数: {slope}")
print(f"截距: {intercept}")
# 预测值
y_pred = model.predict(x)
# 绘制散点图和回归线
plt.scatter(x, y, color='blue', label='实际值')
plt.plot(x, y_pred, color='red', label='回归线')
plt.xlabel('Petal Length')
plt.ylabel('Petal Width')
plt.title('一元线性回归分析')
plt.legend()
plt.show()
如图所示,我们得到了一个线性回归图。
2.逻辑回归
逻辑回归模型用于分析二分类或有序因变量与解释变量之间的关系。
这里具体的实现方法就是:我们从线性回归中得到一个预测值,然后将该值通过逻辑函数进行转换,将预测值转为概率值,再根据概率值进行分类。简单来说,**你可以理解为就是把一个预测的值变成了一个概率出现的值,**这样理论上是增加了准确性的。
使用Logistic回归模型:
与线性回归不同的地方是,它输出的预测值使用的是逻辑函数的非线性函数进行变换。
即如下Sigmoid函数:
g(z) = 1 / (1 + 1/e^z)
分类
分类是一种重要的数据分析形式,它提取刻画重要数据类的模型。数据分类也被称为监督学习,包括
(1)学习阶段(构建分类模型)
(2)分类阶段(使用模型预测给定数据的类标号)。
数据分类方法有以下几种。
1.决策树规约
算法原理
决策树在分类、预测、规则提取等领域有广泛应用。、
作为一种树状结构,它的每个叶节点对应着一个分类,每个非叶节点对应着某个属性上的划分,根据样本在该属性上的不同取值将其划分为若干子集。
构造决策树的核心问题是在每一步如何选择恰当的属性对样本做划分。
2.KNN算法
算法原理
K-近邻分类算法根据距离函数计算待分类样本x和每个训练样本的距离(称为相似度),选择与待分类样本距离最小的K个样本作为x的K个最近邻,最后以x的K个最近邻中的大多数样本所属的类别作为x的类别。
举个例子,有苹果和香蕉两种数据,它们分布在二维特征空间中,围绕一个同心圆,我们根据物以类聚,首先定义K=多少,然后根据K去看离圆心近的K个数据,看两种数据的各自占比,将占比更高的那个数据作为新数据。
3.支持向量机
算法原理
是一种对线性和非线性数据进行分类的方法。SVM使用一种非线性映射,把原始训练数据映射到更高维度上,搜索最佳分离超平面。分为三种:线性可分、线性不可分、非线性。
4.朴素贝叶斯分类
算法原理
以贝叶斯原理为基础,采用了概率推理方法。贝叶斯分类的原理通过计算给定样本在各个类别上的后验概率,把样本判定为最大后验概率所对应的类别。
聚类
聚类的思想是将集合分成由类似对象组成的多个子集的过程。
每个子集被称为一个簇,簇中的对象都是极度相似的,与其他簇中的对象要尽量不同。这就类似于高内聚低耦合,但是这只是一种类比,感觉是一样的。
聚类又分为K-Means聚类、层次聚类、基于密度的聚类。
K-means聚类是使用一种指定划分方法来进行划分;
层次聚类是按照某种方法进行层次的分类,知道满足某种条件;
基于密度的聚类就是指定密度阙值,只要密度超过这个阙值,就把它放进这个聚类中。
主成分分析
主成分分析是一种用线性映射来进行数据降维的方法,同时去除数据的相关性,以最大限度保持原始数据的方差信息。
我们要找出数据里最主要的方面来代替原始数据,这是主成分分析的原理。