所用教材为王晓华《Python机器学习与可视化分析实战》
题型:填空30’,简答题36’,综合题(补全代码)34’
黄色高亮部分表示考察代码
***号前置表示重要
目录
- 第一章:
- 第二章
- 第三章
- 第四章
- 第五章
- 第六章
第一章:
1.数据可视化的三个分类
科学可视化
信息可视化
可视分析
2.使用pip安装第三方类库方法
使用命令 pip install package_name
安装所需的Python包。例如,安装Matplotlib包:
pip install matplotlib
第二章
1.probplot:计算数据在正态分布下的偏离程度
probplot 是 scipy.stats 模块中的一个函数,用于生成正态概率图,以评估数据是否服从正态分
布。正态概率图是一种图形方法,通过比较数据的分位数和正态分布的分位数来判断数据的正态性。
示例代码:
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# 生成正态分布数据
# 生成一个包含1000个随机数的数组,这些随机数服从均值为0,标准差为1的正态分布
data = np.random.normal(loc=0, scale=1, size=1000)
# 生成正态概率图
stats.probplot(data, dist="norm", plot=plt)
plt.show()
2.读取csv文件,参数含义
使用 pandas 库的 read_csv 函数读取CSV文件,常用参数如下:
import pandas as pd
# 读取CSV文件
df = pd.read_csv('data.csv',
sep=',', # 指定分隔符,默认是逗号
header=0, # 指定行数作为列名,默认是第一行
index_col=None, # 指定哪一列作为行索引
usecols=None, # 指定读取的列,默认读取所有列
dtype=None, # 指定列的数据类型
na_values=None, # 指定哪些值作为缺失值
parse_dates=False, # 指定哪些列需要解析为日期
skiprows=0, # 指定跳过的行数
nrows=None # 指定读取的行数
)
3.欧几里得相似度、余弦相似度
欧几里得相似度:
欧几里得距离用于度量两个点之间的直线距离。
余弦相似度:
余弦相似度用于度量两个向量之间的夹角余弦值,值越接近1表示越相似。
4.数据的三个四分位数,对数据进行统计学估计describe, 箱线图含义,画法boxplot1
Q1 (第一四分位数):数据的第25百分位数
Q2 (第二四分位数/中位数):数据的第50百分位数
Q3 (第三四分位数):数据的第75百分位数
代码:
定义df变量并为其赋值
import pandas as pd
data = {'values': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)
画boxplot
import matplotlib.pyplot as plt
plt.boxplot(df['values'])
plt.title('箱线图')
plt.show()
P30例题代码详解:
# 从pylab导入所有内容,这是不推荐的,因为可能会覆盖现有命名空间中的内容
# pylab 是一个将 numpy 和 matplotlib.pyplot 合并在一起的模块
from pylab import *
# 导入pandas库用于数据处理
import pandas as pd
# 导入matplotlib.pyplot库用于绘图
import matplotlib.pyplot as plt
# 定义文件路径,包含数据的CSV文件
filePath = ("c://dataTest.csv")
# 读取CSV文件到一个DataFrame对象中
# 注意:header=None 和 prefix='V' 的参数应该在这里指定
# header=None 表示文件中没有标题行
# prefix='V' 表示为每一列生成一个前缀为'V'的列名,例如V0, V1, V2, ...
dataFile = pd.read_csv(filePath, header=None, prefix='V')
# 输出DataFrame的前5行数据
print(dataFile.head())
# 输出DataFrame的后5行数据
print(dataFile.tail())
# 计算DataFrame的统计摘要并打印出来
summary = dataFile.describe()
print(summary)
# 从DataFrame中提取第11列到第16列的数据,并将其转换为NumPy数组
# iloc[: ,10:16] 选择所有行和第11到第16列 (0索引基)
array = dataFile.iloc[:, 10:16].values
# 绘制箱线图
plt.boxplot(array)
# 设置X轴标签为“Attribute”
plt.xlabel("Attribute")
# 设置Y轴标签为“Score”
plt.ylabel("Score")
# 显示图形
plt.show()
5.数据的标准化
6.高维数据展示:平行坐标图,原理2
7.相关性与热力图corr,pcolor, heatmap3
***相关性矩阵 corr :
相关性矩阵用于计算数据集中各个特征之间的相关系数。
***热力图 heatmap :
是一种判断属性相关性的常用方法,根据不同目标行数据对应的数据相关性进行检测。热力图用于可视 化相关性矩阵。
import pandas as pd
import matplotlib.pyplot as plot
# 定义文件路径并读取数据文件
filePath = (".//dataTest.csv")
dataFile = pd.read_csv(filePath, header=None)
# 计算数据的摘要信息
summary = dataFile.describe()
# 计算相关性矩阵
corMat = pd.DataFrame(dataFile.iloc[1:20, 1:20].corr())
print(corMat)
# 使用matplotlib绘制热力图
plot.pcolor(corMat)
plot.show()
# 使用NumPy生成一个10行12列的随机数数组,这些随机数在0到1之间
data = np.random.rand(10, 12)
# 使用Pandas将NumPy数组转换为DataFrame,并为每一列指定名称为'Var1'到'Var12'
df = pd.DataFrame(data, columns=[f'Var{i}' for i in range(1, 13)])
# 计算相关性矩阵
corr_matrix = df.corr()
# 绘制热力图
# 使用Seaborn的heatmap()函数绘制相关性矩阵的热力图
# 参数annot=True表示在每个单元格上显示数值
# 参数cmap='coolwarm'表示使用'coolwarm'色彩映射
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()
第三章
1.***一元分布图(直方图)distplot4
distplot是库seaborn中的一个函数,用于绘制一元数据的分布图(直方图),同时可以叠加核密度估计图。
示例代码:
import seaborn as sns # 导入Seaborn库用于高级数据可视化
import matplotlib.pyplot as plt # 导入Matplotlib库用于图形操作和显示
# 使用NumPy生成1000个服从标准正态分布(均值为0,标准差为1)的随机数
data = np.random.randn(1000)
# 绘制一元分布图(直方图)
# 使用Seaborn的distplot()函数绘制数据的分布图
# 参数bins=30表示将数据分成30个柱
# 参数kde=True表示绘制核密度估计曲线
sns.distplot(data, bins=30, kde=True)
# 绘制一元分布图(直方图),显示频数
# sns.histplot(data, bins=30, kde=True, stat='count')
# 绘制一元分布图(直方图),显示频率
# sns.histplot(data, bins=30, kde=True, stat='probability')
plt.title('一元分布图(直方图)')
plt.show()
2.***二元分布图jointplot, pairplot(多组)
jointplot用于绘制两个变量的联合分布图,包括散点图和边际分布图。
# 导入所需库
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
data1 = np.random.randn(1000) # 第一个变量的随机数据,服从标准正态分布
data2 = np.random.randn(1000) # 第二个变量的随机数据,服从标准正态分布
# 绘制二元分布图
# 使用 Seaborn 的 jointplot() 函数绘制两个变量的关系图,类型为散点图
sns.jointplot(x=data1, y=data2, kind='scatter')
plt.show()
pairplot用于绘制多组变量之间的成对关系图。
# 导入所需库
import seaborn as sns
import matplotlib.pyplot as plt
# 使用 Seaborn 加载经典的鸢尾花数据集,存储在 DataFrame 中
df = sns.load_dataset('iris')
# 绘制多组变量成对关系图
# 使用 Seaborn 的 pairplot() 函数绘制多组变量的成对关系图
# 参数 hue='species' 表示按照鸢尾花的不同种类(species)进行着色区分
sns.pairplot(df, hue='species')
plt.show()
3.分组groupby用法
groupby是pandas库中用于对数据进行分组并进行聚合操作的方法。
import pandas as pd
data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
'Values': [1, 2, 3, 4, 5, 6]}
df = pd.DataFrame(data)
# 分组并计算均值
grouped = df.groupby('Category').mean()
# 打印分组后的均值
print(grouped)
输出
Values
Category
A 3.0
B 4.0
4.高维数据展示:雷达图
5.***按标签分组画分布图,注意参数的取法hue=”label”
hue参数用于按类别分组绘制分布图
import seaborn as sns
import matplotlib.pyplot as plt
# 生成示例数据(加载鸢尾花数据集)
df = sns.load_dataset('iris')
# 按标签分组绘制分布图
# 使用 Seaborn 的 histplot() 函数绘制萼片长度(sepal_length)的分布图
# 参数 data=df 指定数据集为 df
# 参数 x='sepal_length' 指定 x 轴为 'sepal_length' 列
# 参数 hue='species' 指定按 'species' 列的不同取值进行着色
# 参数 multiple='stack' 指定堆叠显示不同物种的分布
sns.histplot(data=df, x='sepal_length', hue='species', multiple='stack')
plt.show()
6.画散点图、连线图,参数设置 scatter, plot, lineplot…
散点图(scatter plot):
plt.scatter(x, y,
color='blue', # 点的颜色
s=100, # 点的大小
marker='o', # 点的形状
edgecolors='w', # 点的边框颜色
linewidths=2, # 点的边框宽度
alpha=0.75) # 点的透明度
连线图(line plot):
plt.plot(x, y,
color='green', # 线的颜色
linestyle='--', # 线的样式 ('-' 代表实线, '--' 代表虚线, '-.' 代表点划线, ':' 代表点线)
marker='o', # 数据点的标记
markersize=10, # 标记的大小
linewidth=2, # 线的宽度
markerfacecolor='red',# 标记的填充颜色
markeredgewidth=2, # 标记的边框宽度
markeredgecolor='blue', # 标记的边框颜色
alpha=0.75) # 线的透明度
使用seaborn绘制连线图(lineplot):
sns.lineplot(x='x', y='y',
data=df,
color='purple', # 线的颜色
linestyle='-', # 线的样式
marker='o', # 数据点的标记
markersize=10, # 标记的大小
markerfacecolor='yellow', # 标记的填充颜色
linewidth=2) # 线的宽度
第四章
1.经典k-means聚类算法流程,voronoi图的含义5
经典k-means聚类算法流程
1.初始化:随机选择k个初始质心(即簇的中心)。
2.分配样本:将每个样本分配到距离最近的质心所在的簇。
3.更新质心:重新计算每个簇的质心,即所有分配到该簇的样本的平均值。
4.重复步骤2和3:直到质心不再发生变化或达到预定的迭代次数。
目的:类内的点都足够近,类间的点都足够远
Voronoi图的含义
Voronoi图将平面划分为若干个区域,每个区域由一个质心点生成,区域内的所有点距离该质心最近。它在k-means聚类算法中常用于可视化聚类结果。
2.缺失值查看,统计
使用pandas库可以方便地查看和统计数据中的缺失值。
import pandas as pd
# 创建示例数据
data = {'A': [1, 2, None, 4], 'B': [None, 2, 3, 4]}
df = pd.DataFrame(data)
# 查看缺失值
print(df.isnull())
# 统计缺失值
print(df.isnull().sum())
输出
A B
0 False True
1 False False
2 True False
3 False False
A 1
B 1
3.字符数据的独热编码类OneHotEncoder
独热编码(One-Hot Encoding)用于将分类数据转换为二进制向量
from sklearn.preprocessing import OneHotEncoder
# 创建示例数据
data = [['cat'], ['dog'], ['cat'], ['bird']]
# 初始化 OneHotEncoder,设置 sparse=False 表示不返回稀疏矩阵
encoder = OneHotEncoder(sparse=False)
# 独热编码
encoded_data = encoder.fit_transform(data)
# 打印独热编码后的数据
print(encoded_data)
4.高维数据展示:雷达图,原理
5.sklearn中的k-means类的导入和使用,聚类中心的计算(注:cluster_centers_)
from sklearn.cluster import KMeans
import numpy as np
# 创建示例数据
data = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
# KMeans 聚类
# n_clusters=3:指定聚类的簇数为3。
# random_state=9:设置随机种子,以确保每次运行时结果一致。
# fit(data):对数据 data 进行聚类,学习聚类模型。
kmeans = KMeans(n_clusters=3, random_state=9).fit(data)
# 聚类中心
print(kmeans.cluster_centers_)
6.轮廓系数的两个因素,sklearn中轮廓系数的计算6
轮廓系数的两个因素
内聚度
分离度
***sklearn中轮廓系数的计算
from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans
import numpy as np
# 创建示例数据和聚类
data = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(data)
# 获取聚类标签
labels = kmeans.labels_
# 计算轮廓系数
silhouette_avg = silhouette_score(data, labels)
print(silhouette_avg)
7.基于密度的DBSCAN算法流程,相关基本概念:直接密度可达、密度可达、密度相连…7
DBSCAN算法流程:
- 初始化:
随机选择一个未访问的点。 - 扩展簇:
如果该点的邻域内的点数大于等于MinPts,则创建新簇,并将这些点添加到簇中。 对于簇中的每个点,重复检查其邻域并继续扩展簇。 - 标记噪声:
如果某个点不属于任何簇且邻域内点数小于MinPts,则标记为噪声。
基本概念:
直接密度可达:点p在ε邻域内的点数大于等于MinPts,则p是核心点,且邻域内的点直接密度可 达。
密度可达:通过核心点的直接密度可达关系,点q能从点p到达。
密度相连:如果存在一个点o,使得点p和点q都能从点o密度可达,则p和q密度相连。
8.***sklearn中的DBSCAN类的导入和使用
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 使用 DBSCAN 进行聚类
y_pred = DBSCAN().fit_predict(X)
# 绘制聚类结果(示例中缺少绘图代码,这里假设添加绘图代码)
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='viridis')
plt.title('DBSCAN Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
9基于分层的Agglomerative凝聚算法流程,衡量不同簇之间距离的方法
基于分层的Agglomerative凝聚算法流程
衡量不同簇之间距离的方法
第五章
1.一元线性回归、一元非线性(高次)回归、多元线性回归及最小二乘法,回归系数满足的线性方程组的推导8
回归定义:数学上来说,回归就是一个或多个自变量与因变量之间的函数关系。回归分析或回归模型便是利用观测数据去建立这样的函数关系,然后利用这个函数关系进行预测
最小二乘法推导方程组
2.求多元函数极小值的随机梯度下降算法流程9
3.评价指标
均方误差(MSE)
均方根误差(RMSE)
平均绝对误差(MAE)
4.***一元非线性(高次)回归代码10
import numpy as np
from scipy.optimize import leastsq
# 定义二次函数形式的拟合函数
def Fun(p, x):
a1, a2, a3 = p
return a1 * x**2 + a2 * x + a3
# 定义一次函数形式的拟合函数
def Fun1(p, x):
a0, a1 = p
return a0 * x + a1
# 定义二次函数形式的拟合残差
def error(p, x, y):
return Fun(p, x) - y
# 定义一次函数形式的拟合残差
def error1(p, x, y):
return Fun1(p, x) - y
def main():
x = np.linspace(-10, 10, 100) # 创建时间序列,从-10到10,共100个点
p_value = [-2, 5, 10] # 原始数据的二次函数参数
p_value1 = [10, 1] # 原始数据的一次函数参数
noise = np.random.randn(len(x)) # 创建随机噪声
y = Fun(p_value, x) + noise * 20 # 加上噪声的二次函数序列
y1 = Fun1(p_value1, x) + noise * 10 # 加上噪声的一次函数序列
p0 = [0.1, -0.01, 100] # 二次拟合的初始参数设置
p01 = [3.1, -0.01] # 一次拟合的初始参数设置
# 使用最小二乘法进行二次函数拟合
para = leastsq(error, p0, args=(x, y))
# 使用最小二乘法进行一次函数拟合
para1 = leastsq(error1, p01, args=(x, y1))
# 计算拟合后的二次函数曲线
y_fitted = Fun(para[0], x)
# 计算拟合后的一次函数曲线
y_fitted1 = Fun1(para1[0], x)
# 返回拟合结果
return x, y, y_fitted, y1, y_fitted1
# 调用主函数进行拟合并获取结果
x, y, y_fitted, y1, y_fitted1 = main()
第六章
1.逻辑回归的基本任务11
通过学习数据中的特征来预测目标变量属于某个类别的概率。常用于二分类问题,但也可以扩展到多分类问题。模型输出的概率通过阈值决定分类结果(通常0.5作为阈值)。
2.分割函数Sigmoid及其表达式
3.高维数据展示:RadViz雷达图,原理
4.高维数据展示:Andrews曲线,原理
高维数据处理12
- 平行坐标:用多条平行线段表示数据特征,通过线段连接的折线展示数据点在不同特征上的分布和关系。
- RadViz雷达图:数据特征被视为圆周上的半径,数据点则根据特征值在圆周上的位置来显示,帮助快速识别数据的模式和趋势。
- Andrews曲线:使用三角函数将多维数据投影到平面上,每个数据点通过一条平滑曲线表示,便于比较数据点之间的形状和相似性。