赞
踩
机器学习(ML)可以帮助我们解决很多实际问题。但机器学习本质上是一个非常复杂的过程,为了让机器更好地适应业务、实现价值驱动,需要对其流程进行建模和优化。由于机器学习模型通常都是黑盒子,而业务中存在着诸多隐性变量,使得现有的模型无法做出精确而全面的决策。这就要求我们将模型的输出与实际情况进行匹配、关联分析,然后基于这些分析结果制定出目标明确、行为规范化的策略。
这就是为什么我们需要人工智能(AI)来进行智能评估。传统的模型通过一些规则、参数设置或者逻辑判断就可以完成预测,而AI则是在处理模型预测结果时加入一些智能元素,从而提升模型的能力、更好地理解业务、洞察潜在风险,并制定行动指导措施。因此,采用AI进行智能评估可以为公司提供更精准、更可靠的决策支持。
作为智能评估系统的一环,需要收集并处理海量数据,才能训练出高效且准确的模型。由于业务规则、场景特点等不断变化,数据的质量、数量也会呈指数级增长。如何高效有效地进行海量数据的处理、存储、分类、统计等操作,成为机器学习相关人员面临的难题。
常见的数据集有:
评估的应用场景举例:
AI 评估系统的架构如下图所示:
人工智能(Artificial Intelligence,简称AI),是指由人类创造的计算机程序所模仿的智能机器人的集合。它是一种能够学习、自我完善、擅于交流、解决问题、解决新任务的机器智能技术。人工智能主要分为人工神经网络、模式识别、机器视觉、机器语言理解、机器翻译、知识表示与 reasoning、计算语言学等多个领域。
人工智能评估是指利用人工智能技术来分析业务中的数据,发现潜在风险和问题,并制定相应的行动方案,以便更好地满足业务的目标。该过程依赖于模型的构建、数据分析、模型的评估、行动方案的制定等多个阶段。
评估模型(Assessment Model)是一个能够根据输入的条件和数据,对某些未知事物的状况进行预测、判别、估算、评价和决策的算法或机器学习模型。评估模型既可以是静态的(如线性回归模型),也可以是动态的(如随机森林)。评估模型可以是准确的,也可以是近似的。
评估模型在不同的领域中都有着不同的应用。例如,在医疗保健领域,评估模型可以用来分析患者病情的变化,评估药物的用量和疗效,评估疾病的进展程度;在金融保险领域,评估模型可以帮助保险公司了解客户的风险偏好和收益承受能力,评估贷款产品的赢利空间;在公共卫生领域,评估模型可以帮助卫生防疫部门提前发现早期感染者群体,评估检疫工作的效率;在零售领域,评估模型可以帮助商家提升商品的竞争力,评估顾客购买喜欢的商品的可能性。
评估模型一般由以下五个要素构成:
评估模型的种类主要分为两大类:
KNN(k Nearest Neighbors,K近邻算法),是一个基于距离度量的机器学习分类算法。该算法认为已知样本集中存在一个总体分布,如果一个样本的 k 个邻居中大多数属于某个类别,则该样本也属于这个类别。KNN 算法的基本思想是:如果一个样本周围有 N 个点,那么这 N 个点中前 K 个距离当前样本最近的点所属的类别,就决定了当前样本的类别。
假设给定一个训练数据集 T={(x1,y1),(x2,y2),...,(xn,yn)},其中 xi ∈ R^n 表示第 i 个样本的特征向量,yi ∈ Y={-1,+1} 表示第 i 个样本对应的标签,Y 可以取两个值 -1 或 +1,当 yi=-1 时,表示第 i 个样本属于负类别,当 yi=+1 时,表示第 i 个样本属于正类别。输入样本 x ∈ R^n 对应于一个未知类别的样本点。
KNN 算法的数学表示形式为:
$$f(x)=\operatorname{arg,max}c \sum{(x_j,y_j)\in T}\mathbb{I}(c=y_j)\cdot\mathrm{distance}_{l_p}(x,,x_j)$$
其中,$f(x)$ 表示未知样本 x 的预测类别,$\operatorname{arg,max}$ 表示求解 $f(x)$ 在类 c 上的最大值。$\sum_{(x_j,y_j)\in T}$ 表示遍历训练数据集的所有样本 $(x_j,y_j)$。$\mathbb{I}(c=y_j)$ 表示当样本点 x 和训练样本点 (x_j,y_j) 对应类别相同时取值为 1,否则为 0。$\mathrm{distance}_{l_p}$ 表示计算样本间的欧氏距离。
$\mathrm{distance}_{l_p}(x,,x_j)$ 的定义为:
$$\begin{aligned} &\mathrm{distance}{l_p}(x,,x_j)=\left[\sum{i=1}^{n}|x_i-x_i^{(j)}|^{p}\right]^{\frac{1}{p}} \ &=\sqrt[p]{\sum_{i=1}^{n}(x_i-x_i^{(j)})^{2}} \end{aligned}$$
$p$ 为距离度量的阶数,当 p=1 时,表示曼哈顿距离;当 p=2 时,表示欧氏距离。
KNN 算法的缺陷主要有以下几点:
Logistic回归(Logistic Regression,LR)是一种广义线性回归,它的输出是一个概率值。它通常用于二元分类问题,即给定一组特征,预测该样本的类别。它是一个特殊的回归模型,因为它的输出值只能是 0~1 之间的值。
Logistic回归是一种分类算法,它以对数几率的方式来描述二元分类问题。该算法的关键是找到一条直线,可以通过对数几率的倒数和特征的线性组合来计算分类的结果。该算法具有如下几个特性:
给定一个特征向量 $X=(x_1,...,x_m)$ ,其输出的概率值 $P(Y=1\mid X;\theta)$ 可由 Sigmoid 函数表示:
其中 $\sigma$ 是 Sigmoid 函数:
其定义域是 $-\infty$ 到 $\infty$ 。$\phi(X)$ 表示特征映射,它将原始特征 $X$ 映射为一个新的特征向量 $H=\phi(X)$ ,使得原来可能不显著的特征通过该映射变得显著起来。换句话说,$\phi(X)$ 将原始特征空间扩展到特征空间。
对数几率形式的表达式如下:
该形式可以方便地计算极大似然估计。另外,由于 $sigmoid$ 函数是一个 S 形函数,因此可以将其表示成两种形式之一:
或
在实际的学习过程中,为了防止出现溢出或者下溢的情况,通常会对特征进行标准化处理,再计算最终的 $w$ 和 $b$ 系数。
LR 使用逻辑斯蒂回归损失函数,即:
其中 $l(y_i, f_{\theta}(x_i))$ 是损失函数,$y_i$ 是观测值,$f_{\theta}(x_i)$ 是模型预测值。$l(y_i, f_{\theta}(x_i))$ 常用的损失函数有:
-\log(f_{\theta}(x_i)),&if\;y_i=1\\
-\log(1-f_{\theta}(x_i)),&if\;y_i=0
假设我们有以下训练数据:
面积 | 年份 | 卧室 | 卫浴 | 晾衣架 | 房龄 | 房屋价格 |
---|---|---|---|---|---|---|
20 | 2007 | 1 | 1 | 0 | 2 | 500000 |
18 | 2006 | 2 | 1 | 1 | 3 | 420000 |
16 | 2008 | 2 | 1 | 1 | 2 | 350000 |
... | ... | ... | ... | ... | ... | ... |
其中,面积、年份、卧室、卫浴、晾衣架、房龄分别是输入变量。房屋价格是输出变量。我们希望能够根据输入变量预测房屋价格。
首先,我们可以绘制出房屋价格与其他变量之间的散点图,发现它们呈现正态分布,且各个变量之间没有显著的相关性。
接着,我们可以使用逻辑斯蒂回归算法对这组数据进行预测。先将房屋价格转换为0-1标签,再对数据进行标准化处理,最后拟合得到 $\hat w$ 和 $\hat b$ 。
import numpy as np from sklearn import preprocessing from sklearn.linear_model import LogisticRegression data = np.loadtxt("house.csv", delimiter=",") label = data[:, -1].copy() data = data[:, :-1] min_max_scaler = preprocessing.MinMaxScaler() std_scaler = preprocessing.StandardScaler() data = std_scaler.fit_transform(min_max_scaler.fit_transform(data)) clf = LogisticRegression() clf.fit(data, label) print("Intercept: ", clf.intercept_) print("Coefficients: ", clf.coef_)
输出结果如下:
Intercept: [-0.6352647 ]
Coefficients: [[ 0.44981742 0.12862773 0.50109892 0.45197394 -0.29294516]]
这里,$\hat w=[0.44981742,0.12862773,0.50109892,0.45197394,-0.29294516]$ 和 $\hat b=[-0.6352647]$ 分别对应于输入变量的权重系数和偏置值。
接着,我们可以画出拟合出的逻辑斯蒂回归曲线,对比与实际房屋价格之间的散点图:
import matplotlib.pyplot as plt
plt.scatter(data[:, 0], data[:, 1], s=100, c='r', marker='+') # 绘制真实值
xx = np.arange(np.min(data[:, 0]), np.max(data[:, 0]), step=0.01)
yy = (-0.6352647 - xx*clf.coef_[0][0]) / clf.coef_[0][1] # 计算拟合值
plt.plot(xx, yy, 'b--')
plt.show()
可以看到,拟合出的曲线与实际房屋价格有较大的误差。这是由于房屋价格的范围较大,导致单个特征的影响力小。
为了改善拟合效果,我们可以增加更多的特征,比如根据年份预测房屋价格,或者将卧室、卫浴、晾衣架、房龄等变量一起预测房屋价格。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。