数据科学导论
一、选择题
1、下面属于降维常用的技术的有 D 。
A.离散化
B.特征提取
C.朴素贝叶斯
D.主成分分析
2、创建一个 3*3 的数组,下列代码中错误的是 。C
A.np.arange(0,9).reshape(3,3)
B.np.eye(3)
C.np.random.random([3,3,3])
D.np.array([[1,2,3],[4,5,6],[7,8,9]])
3、以下关于降维的说法不正确的是? B 。
A.降维是将训练样本从高维空间转换到低维空间
B.降维不会对数据产生损伤
C.通过降维可以更有效地发掘有意义的数据结构
D.降维将有助于实现数据可视化
4、下列关于 Kmeans 聚类算法的说法错误的是 D 。
A.对大数据集有较高的效率并且具有可伸缩性
B.是一种无监督学习方法
C.K 值无法自动获取,初始聚类中心随机选择
D.初始聚类中心的选择对聚类结果影响不大
5、一监狱人脸识别准入系统用来识别待进入人员的身份,此系统一共包括识别 4 种不同的
人员:狱警,小偷,送餐员,其他。下面哪种学习方法最适合此种应用需求: B
A、 二分类问题
B、 多分类问题
C、 层次聚类问题
D、 k-中心点聚类问题
6、Numpy 中统计数组元素个数的方法是( C )。
A.ndim B.shape C.size D.itemsize
7、决策树中的分类结果是最末端的节点,这些节点称为( D )。
A.根节点 B.父节点 C.子节点 D.叶节点
8、验证集和测试集,应该:( A )。
A.样本来自同一分布 B.样本来自不同分布
C.样本之间有一一对应关系 D.拥有相同数量的样本
9、一般,k-NN 最近邻方法在(B )的情况下效果较好。
A. 样本较多但典型性不好
B. 样本较少但典型性好
C. 样本呈团状分布
D. 样本呈链状分布
10、以下不属于影响聚类算法结果的主要因素有(A)
A、 已知类别的样本质量
B、 分类准则
C、 特征选取
D 、模式相似性测度
11、以下哪种技术对于减少数据集的维度会更好 A 。
A.删除缺少值太多的列
B.删除数据差异较大的列
C.删除不同数据趋势的列
D.都不是
12、对于 k 近邻法,下列说法错误的是©。
A、不具有显式的学习过程
B、B、适用于多分类任务
C、C、 k 值越大,分类效果越好
D、D、通常采用多数表决的分类决策规则
13、欠拟合的产生原因有 A
A、学习到数据的特征过少
B、学习到数据的特征过多
C、学习到错误数据
D、机器运算错误
14、线性回归中只有一个自变量的情况称为(A)
A.单变量回归
B.多变量回归
C.多元回归
D.二元回归
15、以下哪些方法不能用于处理过拟合?(D )
A. 减少特征维度,防止维灾难
B.增大数据的训练量
C.利用正则化技术
D.增加特征维度
16、在 NumPy 中创建一个元素均为 0 的数组可以使用(A)函数。
A.zeros( ) B.arange( ) C.linspace( ) D.logspace( )
17、关于数据集的标准化,正确的描述是:( A )。
A.数据集标准化有助于加快模型的收敛速度
B.标准化一定是归一化,即数据集的取值分布在[0,1]区间上
C.数据集的标准化一定是让标准差变为 1
D.所有的模型建模之前,必须进行数据集标准化
18、.Python 安装第三方库的命令是( C )。
A.pip –h B.pyinstaller <拟安装库名>
C.pip install <拟安装库名> D.pip download <拟安装库名>
19、线性回归的核心是(C)
A. 构建模型 B. 距离度量 C. 参数学习 D. 特征提取
20、关于线性回归的说法不正确的是(D)
A.线性回归是目标值预期是输入变量的线性组合
B.回归用于预测输入变量和输出变量之间的关系
C.线性回归的曲线拟合已知数据且很好地预测未知数据。
D.线性模型形式极其复杂
二、填空题
1、pandas 中用于删除缺失值的函数是【dropna()】,填充缺失值的函数是【fillna】 ,表示行方向使用参数 【axis=1 】,列方向参数 【axis=0】
2、回归问题和分类问题的区别是(回归问题是连续的,分类问题是离散的)
3、聚类是一种(无监督)学习
4、将原始数据进行集成、变换、维度约简、数值规约是 (数据预处理)
步骤的任务。
5、机器学习主要模拟了人的(学习)
6、Matplotlib 中的提供了一批操作和绘图函数的包是 (pyplot)
7、SVM 算法的最小时间复杂度是 【O(n^2)】。该算法不适用于【大数据集】
8、Numpy 提供了两种基本对象,一种是 (ufunc),另一种是 (ndarray) 。
9、pandas 加载 csv 文件的常用命令【pd.read_csv()】。
10、(主成分分析 PCA)算法核心思想就是将 n 维特征映射到 k 维上(k < n),这 k 维是全新的正交特征。
11、Series 是一种一维数组对象,包含一个值序列。Series 中的数据通过(索引 )访问
12、Numpy 的主要数据类型是(ndarray )。
13、若训练过程的目标是预测连续值,此类学习任务称为(回归 )
14、在 K-Means 算法中,由簇的(平均值 )来代表整个簇。
15、Numpy 中的 random 模块中的对一个序列进行随机排序的函数是(shuffle )
16、scikit-learn 是面向(机器学习)方向第三方库。
17、【核主成分分析】是一种使用内核将信号映射到(典型的)非线性空间并使其线性可分(或接近可分)的技术。
18、当学习器把训练样本学得“太好”了的时候,可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种现象在机器学习中称为(过拟合 )。
19、回归任务中最常用的性能度量是( 均方误差)
20、支持向量机 SVM 的主要目标是寻找最佳超平面,以便在不同类的数据间进行正确分类。
21、sklearn 模块的(datasets )子模块提供了多种自带的数据集,可以通过这些数据集进行数据的预处理、建模等操作。
三、简答题
1. 数据清洗:
在获取的数据中,缺失值、不一致、错误或怪异字符的情况屡见不鲜,这就需要对数据进行清洗才能更好的进行处理。数据清洗(data cleaning)指对数据进行重新审查和校验,目的在于对删除数据重复信息,纠正存在的错误,并提供数据一致性。常见手段;行过滤,列抽取,值替换,单词提取,缺失值处理
2.主成分分析的主要思想
主成分分析(PCA)是一种帮助定义更小、更相关的特征集合的技术,新的特征是当前特征的线性组合(即旋转)。主要思想是将n维特征映射到更小的k维特征上,这些k维特征是全新的正交特征,我们将这k维称为主元,是全新构造的k维特征,而不是简单的从n维特征上提取出的k维特征。目的是提取数据的主要特征分量
3.维数约简
当我们不得不处理带有大量特征的数据集,很多特征是不必要的,消除输入数据的某些特征,创建一个有限的特征数据集,包含所有必需的信息,从而以更有效的方法预测目标变量,减少特征数量也就意味着减少了输出的复杂性和变化性。
4.为什么要进行异常值检测和处理
在数据科学中,样本是数据处理学习的核心,如果非正常、不一致、有异常值的数据输入到了学习过程,所得到的模型可能无法正确适应新数据的变化。数据中有异常高的值,不仅会改变数据的方差、均值等描述性的测量,也会影响到从这些数据中学到的算法,进而将这些算法暴露给异常值,期待从这些数据中获得异常的响应
5.简述交叉验证的主要思想
交叉验证是指将训练数据分为k组(折),训练模型k次,每次选择一个不同的分组不参与训练。十折是常见的设置也是我们建议的,每次训练数据之后,利用剩余的数据进行测试,并存储测试结果,我们会得到和折数一样多的结果,并根据这些数据计算平均值和标准差。不同模型交叉验证的结果的均值,可以选择总体性能最好的假设模型
6.简述k近邻算法
k近邻(KNN)算法,属于基于实例的学习方法,也称懒分类器,是最简单的分类方法之一。在分类过程中仅需(基于欧氏距离或其他基本距离)将样本点最近的前k个样本,然后给定最相似的k个样本,出现最多的目标标号,选为分类标号。有最重要的两个参数:一个是相邻样本数量k,还有一个是估计相似度的度量
7.简述数据科学过程(OSEMN)
OSEMN的过程是数据获取、数据改写、数据探索、数据建模、数据可视化
数据获取:网页爬虫、从数据库或API获取数据,csv文件或json文件
数据改写:行过滤、列抽取、值替换、缺失值处理
数据探索:特征选择、降维、异常检测和处理
数据建模:模型关于分类、回归或聚类
数据可视化:用matplotlib进行可视化
8.无监督学习特点:
无监督的学习是指模型在训练数据中,每个样本没有对应的标签和目标输出,模型通过学习数据的内在结构和相似性进行聚类、降维或异常检测等任务,常见的无监督学习是聚类分析,给定数据,分析隐藏的结构
9.朴素贝叶斯分类器的特点:
朴素贝叶斯分类器是一种常见的概率多类分类器,给定特征向量,根据贝叶斯规则对每类进行预测,当数据非常大,特征很多且有一致的先验概率时,该分类器非常有效,所以常用于文本分类
10.混淆矩阵的特点:
混淆矩阵是一张显示每类被错分为其他类情况的表,一个完美的分类,它的混淆矩阵上的非对角线的元素都为零, 它是一张特定的矩阵用来呈现算法性能的可视化效果,每一列代表的是预测值,每一行代表实际的类别
11.协方差矩阵
协方差矩阵给出了所有不同特征值的相关性的概念,这是维数约简的第一步,因为他给出了强相关特征和独立特征的数量
四、代码操作题。
1、根据要求,完成代码。此处有 iris.csv 文件,数据为 iris 数据集。
(1) 导入必要的库,读取 iris.csv 数据,命名为 iris。
import pandas as pd
iris = pd.read_csv('iris.csv')
(2) 查看 iris 的后 5 行数据。
last_5_rows = iris.tail(5)
print(last_5_rows)
(3) 获取 iris 的维度(行和列)。
rows, columns = iris.shape
print("行数:", rows)
print("列数:", columns)
(4)查看 target 列是否存在缺失值。
missing_values = iris['target'].isnull().sum()
if missing_values > 0:
print("target 列存在缺失值")
else:
print("target 列不存在缺失值")
(5)提取 iris 的前 4 列。
first_4_columns=iris.iloc[:,:4]
#打印提取的前 4 列
print(first_4_columns)
(6)提取“target”列
target = iris['target']
print(target)
(7)取出 target 为 0 的所有行。
#提取"target"为 0 的所有行
target_0_rows = iris[iris['target'] == 0]
#打印提取的行
print(target_0_rows)
(8)提取数据集萼片长度(sepal length)大于 6 的所有行
sepal_length_gt_6_rows = iris[iris['sepal length'] > 6]
#打印提取的行
print(sepal_length_gt_6_rows)
(9)根据 target 分组,计算每组的四个特征的数据平均值。
grouped_data = iris.groupby('target').mean()
#打印每组的四个特征的数据平均值
print(grouped_data)
(10)根据特征’sepal_length’对数据集排序,并显示前 10 行
sorted_data = iris.sort_values(by='sepal_length')
# 显示排序后的前 10 行数据
print(sorted_data.head(10))
(11)计算 iris 中每行非零元素个数
# 计算每行非零元素的个数
nonzero_count = iris.apply(lambda x: np.count_nonzero(x), axis=1)
# 打印每行非零元素的个数
print(nonzero_count)
(12) 获取 df 中每一列非零元素个数
non_zero_count = df.astype(bool).sum()
(13)提取样本的特征名
# 提取样本的特征名
feature_names = iris.columns[:-1]
# 打印特征名
print(feature_names)
2、这里加载的数据集是鸢尾花 iris 数据集,说出以下代码的作用。
from sklearn.decomposition import PCA
from sklearn import datasets (1) #导入 sklearn 模块中 datasets 类
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
iris=datasets.load_iris().data
pca_2c = PCA(n_components=2) (2)#使用 PCA 技术降维,特征向量选取 2 个
x_pca_2c = pca_2c.fit_transform(iris.data) (3)# 对数据先进行拟合处理,然后再将其进行标准化
km = KMeans(n_clusters=3) (4)#k-均值聚类算法,开始聚类中心个数位 3
labels = km.fit(x_pca_2c).labels_ (5)#导入训练集,聚类模型训练
plt.scatter(x_pca_2c[:,0], x_pca_2c[:,1], c=labels) (6)#用散点图可视化分类数据,去除训练集的第一列和第二列,颜色用聚类的簇标签决定
plt.show()
3.这里加载的数据集是加利福尼亚州的房价数据集。说出加粗有序号的代码的作用。
from sklearn import datasets (1)#从 sklearn 库中导入 datasets 模块,用于加载各种经典的数据集
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.neighbors import KNeighborsRegressor
cali = datasets.california_housing.fetch_california_housing() #加载数据集
x = cali[‘data’]
y = cali[‘target’] (2)#从名为 cali 的 DataFrame 中提取名为’target’的列,并将其赋值给变量 y
x_train,x_test,y_train,y_test = train_test_split(x,y,train_size=0.8) (3)#使用 train_test_split 函
数将数据集 x 和目标变量 y 划分为训练集和测试集
regressor = KNeighborsRegressor()
regressor.fit(x_train, y_train) (4)
#使用回归器(regressor)对训练集(x_train 和 y_train)进行拟合(fit)
y_est = regressor.predict(x_test) (5)
#使用训练好的回归模型(regressor)对测试集(x_test)进行预测(predict)
print(“MAE=”, mean_squared_error(y_test, y_est)) (6)
#计算预测结果(y_est)与真实目标变量(y_test)之间的均方误差