一、机器学习
- 定义:从已有的观察数据中学习规律,从而获得知识、建立数学模型,并利用模型对新的观察数据做出预测或解释。
- 关键:从已有的观察数据中学习模型,并不断调整参数,使模型拟合已有的观察数据,从而建立合适的数学模型
- 分类:有监督学习 & 无监督学习
-
有监督学习
主要包含分类和回归。
从带有标签(目标值)的输入数据中学习,并基于这一模型对新的输入数据计算新的输出,来作为与新数据关联的预测值。
带标签的数据是每个输入有对应输出,即$(x,y)$,这个输出$y$就是标签。每一条数据记录都是一个样本。
对于离散数据,使用分类;
对于连续数据,使用回归。
-
无监督学习
只需要特征数据,没有标签数据的机器学习就是无监督学习。即仅有$x$作为输入。
用于聚类和降维。
-
二、基于Scikit-learn库建立线性回归模型
- 回归学习,基于上文,一眼盯真,鉴定为有监督学习。
以课件的案例举例,通过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_size和test_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 。
完整代码太长,不在此复制粘贴。
三、人工智能及其周边相关内容
-
云存储、云计算
云存储为提供高可靠、高性能、规格丰富、可弹性扩展的块存储服务。
适用于分布式文件系统、开发测试、数据仓库、高性能计算等场景。
类型:对象存储、文件存储和数据块存储。
云计算利用互联网提供各种计算服务,特点是弹性,能根据用户需求和负载动态地调整资源的使用量和性能,从而实现高效、灵活和经济的服务。
-
GPU扩展算力
-
硬件上,GPU有更多的核心数量,使其可以同时处理更多线程任务。CPU顶破天只有几百个核心,一般用来处理更少的但更复杂的任务。
简略地,GPU有更强的并行处理能力。
-
GPU针对矩阵和向量运算有优化,符合深度学习的需求。、
-
GPU的显存速度更快,而CPU依赖的RAM更慢。
-
NVIDIA的CUDA技术/cuDNN软件库。
-
-
应用
- 法律检索和文书处理
- 司法审判智能辅助
- 法律风险预测和评估
- 电子证据智能分析
-
伦理
- 算法应当具有可解释性。即不仅让人知道他决策了啥,还要知道他如何决策。不可解释意味着不可追责。
-
人工智能安全问题
-
内生数据安全问题:输入数据、框架、算法、算力的攻击和破坏;技术本身的漏洞;
数据泄露、算法歧视(数据样本来源的偏差)、虚假数据
-
衍生数据安全问题:因使用AI带来的新的问题和挑战
AI赋能数据安全
- 提升现有数据安全防护系统性能
- 增强数据安全防护能力
- 创新数据安全防护技术
-