机器学习及人工智能

一、机器学习

  1. 定义:从已有的观察数据中学习规律,从而获得知识、建立数学模型,并利用模型对新的观察数据做出预测或解释。
  2. 关键:从已有的观察数据中学习模型,并不断调整参数,使模型拟合已有的观察数据,从而建立合适的数学模型
  3. 分类:有监督学习 & 无监督学习
    1. 有监督学习

      主要包含分类回归

      从带有标签(目标值)的输入数据中学习,并基于这一模型对新的输入数据计算新的输出,来作为与新数据关联的预测值。

      带标签的数据是每个输入有对应输出,即$(x,y)$,这个输出$y$就是标签。每一条数据记录都是一个样本。

      对于离散数据,使用分类;

      对于连续数据,使用回归。

    2. 无监督学习

      只需要特征数据,没有标签数据的机器学习就是无监督学习。即仅有$x$作为输入。

      用于聚类降维

二、基于Scikit-learn库建立线性回归模型

  1. 回归学习,基于上文,一眼盯真,鉴定为有监督学习。

以课件的案例举例,通过AT, AP, RH, V预测PE。

素材xlsx在这个超链接里。 如果打不开就复制链接 http://www.xfrozenx.top/myfile/Combined_Cycle_Power_Plant_Data_Set.xlsx

首先读取数据

import pandas as pd

#读xlsx
ccpp_data=pd.read_excel("Combined_Cycle_Power_Plant_Data_Set.xlsx")

#读特征值,即第一部分中的x
# .values 方法使返回值变成一个二维列表,而非原本的dataframe对象
X=ccpp_data.iloc[:,:-1].values

#读目标值,即y
y=ccpp_data.iloc[:,-1].values

读取特征值读[:,:-1]即读取所有行中的除最后一列的所有数据。为了等会找回归关系。读目标值只读最后一列,因为题设任务是求最后一列。

对于有监督学习,在训练好模型后、预测数据前,可以通过一组测试数据来评估模型的泛化能力,即模型的预测能力。通过train_set_split()函数或test_set_split()函数实现。

train_set_split() 函数中各参数要求如下:

train_set_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)

其中,arrays 是具有相同长度的可索引序列(如列表、dataframe对象等),可以传入多个。

test_size 是浮点数或整数。如果是浮点数,则代表百分比,值应介于0、1之间;如果是证书,代表测试集绝对数量。

train_size 同上。

train_sizetest_size均为空时,自动取test_size=0.25.

random_state是随机数种子,一般为None。传入任何固定常量都会导致每次运行得到相同的划分。请注意,$0\neq None$.

shuffle是布尔值,表示划分前是否打乱数据,默认True。如果是False,则stratify=None

该函数对于每一个array,返回两个列表,分别是每一个array的训练集和测试集。

在该案例中,代码实现如下:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=0)

X_train,X_test 是两个二维列表,因为X本身就是二维的。剩余的两个是一维的。

在划分好训练集和测试集后,就可以利用训练集进行线性回归运算。我们的课上也只讲了线性回归。

线性回归使用.fit() 方法。

from sklearn.linear_model import LinearRegression # 引入线性回归库
m=LinearRegression() #构建对象

#核心一步!!!
m.fit(X_train,y_train) #利用训练集中的数对(x,y)开始回归运算,得到模型

print(m.intercept_,m.coef_) #输出截距和各系数

截距单独输出一个浮点数,各回归系数输出一个列表,分别对应$x_1,x_2,x_3,x_4$,即xlsx中前四列的系数。这个例子中的截距和各系数又臭又长,不在此赘述。

接着可以通过回归系数$R$来评判数据符合模型的程度,一般使用$R^2$。学不会需要求教高中老师了。

$R^2$的公式是:

$$ R^2=\frac{\sum^n_{i=1}(y_i-\overline{y})^2}{\sum^n_{i=1}(\hat{y}_i-\overline{y})^2} $$

其中,$\hat{y}_i$是用模型预测的第$i$个样本的目标值,$\overline{y}$是样本真实目标值的平均值。

有两种方法计算一个模型的$R^2$。在此分别介绍。

第一种,直接运用LinearRegression() 对象的.score 方法算。即把每个$(x,y)$数对带进去算。

.score 方法的参数如下:

score(self,X,y,sample_weight=None)

可见.score 方法是基于输入和标签值来算的。

该部分案例代码如下:

#狠狠地算训练集的R^2 !
train_predict_score=m.score(X_train,y_train)
#测试集
test_predict_score=m.score(X_test,y_test)

就得到了针对训练集和测试集的两个回归系数。

第二种,基于训练集真实的输入数据$x$,用模型跑一遍得到一组预测的y,再将预测的y与真实的y进行运算,得到回归系数

r2_score() 函数的参数如下:

r2_score(y_true,y_pred,*,sample_weight=None,...,force_finite=True)
#中间省略号省略一些不重要的

可见r2_score() 是根据一组数据的真实值和模型预测值来算回归系数的。

该部分案例代码如下:

from sklearn.metrics import mean_squared_error,r2_score
y_train_pred=m.predict(X_train) #用训练集的x,根据模型运算一下预测的y是怎样的
y_test_pred=m.predict(X_test) #同上

#接下来开始算,用真实值和预测值进行比较。
train_predict_score=r2_score(y_train,y_train_pred)
test_predict_score=r2_score(y_test,y_test_pred)

到这里,线性回归函数建立并测试完备了。接下来用新的数据来预测新的值。

数据是素材提供的。

import numpy as np
X_new=np.array([[15,42,1024,73],[5,40,1012,92]])
y_new=m.predict(X_new)

此处的代码逻辑是,m() 是一个线性回归对象(LinearRegression() ,如上文),predict() 方法让它根据X_new 作为输入,得到一个新的输出值并存入y_new

完整代码太长,不在此复制粘贴。

三、人工智能及其周边相关内容

  1. 云存储、云计算

    云存储为提供高可靠、高性能、规格丰富、可弹性扩展的块存储服务。

    适用于分布式文件系统、开发测试、数据仓库、高性能计算等场景。

    类型:对象存储、文件存储和数据块存储。

    云计算利用互联网提供各种计算服务,特点是弹性,能根据用户需求和负载动态地调整资源的使用量和性能,从而实现高效、灵活和经济的服务。

  2. GPU扩展算力

    1. 硬件上,GPU有更多的核心数量,使其可以同时处理更多线程任务。CPU顶破天只有几百个核心,一般用来处理更少的但更复杂的任务。

      简略地,GPU有更强的并行处理能力。

    2. GPU针对矩阵和向量运算有优化,符合深度学习的需求。、

    3. GPU的显存速度更快,而CPU依赖的RAM更慢。

    4. NVIDIA的CUDA技术/cuDNN软件库。

  3. 应用

    1. 法律检索和文书处理
    2. 司法审判智能辅助
    3. 法律风险预测和评估
    4. 电子证据智能分析
  4. 伦理

    1. 算法应当具有可解释性。即不仅让人知道他决策了啥,还要知道他如何决策。不可解释意味着不可追责。
  5. 人工智能安全问题

    1. 内生数据安全问题:输入数据、框架、算法、算力的攻击和破坏;技术本身的漏洞;

      数据泄露、算法歧视(数据样本来源的偏差)、虚假数据

    2. 衍生数据安全问题:因使用AI带来的新的问题和挑战

    AI赋能数据安全

    • 提升现有数据安全防护系统性能
    • 增强数据安全防护能力
    • 创新数据安全防护技术