五、特征缩放和多项式回归

目录

一、为什么要使用特征缩放(Feature Scaling)

1.首先来看预测房价的例子

2.特征缩放前后效果对比

二、特征缩放方法

1.统一除以范围最大值

2.均值归一化(Mean Normalization)

3.Z-score标准化(Z-score Normalization)

4.一些可以接受/不接受的缩放范围

三、如何识别梯度下降是否收敛

四、如何选择一个合适的学习率

1.学习曲线(J(w,b)-迭代次数)

2.学习率选择技巧

3.特征缩放和学习率选择实验

(1)在具有多个特征的数据集上运行梯度下降,探索学习率alpha对梯度下降的影响

①多特征数据集

②导入数据集

③绘制每一个特征和结果(房价)的散点分布图

④多特征的梯度下降算法

⑤选用学习率为9.9*10^-7时,迭代10次

⑥选择较小的学习率9.0*10^-7

⑦继续缩小学习率,使用1.0*10^-7

(2)使用z-score标准化通过特征缩放提高梯度下降的性能

①z-score计算公式及各参数计算方法

②代码实现

③标准化过程及效果

④比较原始数据和标准化处理后的各特征值x

⑤用标准化处理后的数据重新执行梯度下降算法

⑥使用训练好的模型进行预测

⑦J(w,b)等值线图下观察标准化对梯度下降算法效果

4.总结

五、特征工程和多项式回归

1.特征工程

2.多项式回归(也是很重要的回归模型)

3.特征工程和多项式回归实验

(1)没有进行特征工程的线性回归模型

(2)使用梯度下降的方式去训练多项式回归模型

(3)使用三次多项式回归模型训练

(4)从另一个角度来考虑选择什么样的模型更好的拟合训练数据

(5)使用特征缩放对x,x^2,x^3进行处理以后的效果

(6)使用特征工程还可以对复杂场景进行函数建模

4.总结

六、本章小结


一、为什么要使用特征缩放(Feature Scaling)

目的:使梯度下降算法运行速度更快,效果更好

1.首先来看预测房价的例子

        x1表示房子面积(范围较大),x2表示卧室数量(范围较小)

        (1)如果初始时,w1设置为50,w2设置为0.1,那么初始计算的price为:100050

        (2)如果初始时,w1设置为0.1,w2设置为50,那么初始计算的price为:500(这个相对更合理)

        从上面可以看到,如果x1和x2两个特征差距太大,相应的w1和w2两个参数也会差距太大

        当x1范围大则w1相应的变化范围就会很小当x2范围小则w2相应的变化范围就会很大

2.特征缩放前后效果对比

        下图是x1、x2进行特征缩放前后的f(x1,x2)散点分布图代价函数J(w,b)的等高线图

        如果按原样训练数据。因为J(w,b)轮廓高而细,梯度下降可能会在结束前来回反弹了很长时间都没办法找到全局最小值的方法。在这种情况下,一个有用的要做的就是缩放特征。这意味着执行一些对训练数据进行变换,使x1的范围现在可以从0到1x2的取值范围也可以是0到1

        数据点看起来更像这样左下的散点图;你可能会注意到下面的图的比例现在相当和上面的不一样。关键是x1和x2现在都是可比较的,如果你运行梯度下降在这里找到一个成本函数,使用它重新缩放x1和x2变换后的数据,轮廓看起来会更像圆圈(右下),梯度下降法可以通过更直接的路径到全局最小值,缩放后更容易找到合适的w和b参数值


二、特征缩放方法

1.统一除以范围最大值

2.均值归一化(Mean Normalization)

        分子为x1-μ(均值)

        分母为范围最大值-范围最小值

        均值归一化的取值范围为-1~1

3.Z-score标准化(Z-score Normalization)

        计算公式为𝑍=(𝑋−𝜇)/𝜎,其中Z表示Z分数,X表示一个数据点的值,μ表示数据集的均值,𝜎表示数据集的标准差

4.一些可以接受/不接受的缩放范围


三、如何识别梯度下降是否收敛

        可以借助J(w,b)-迭代次数学习曲线来获取一些梯度下降的信息

1.如果随着迭代次数增加,J(w,b)不降反增,这表示α可能选择的太大,或者程序出现了bug

2.当迭代到一定次数后,J(w,b)趋于平稳,那么就可能意味着经过这些次数迭代J(w,b)收敛

3.不同的代价函数迭代次数不一样,有的30次就收敛,有的1000次,有的100000次,这个次数经过我们绘制学习曲线也会有个比较直观的认识。

        具体什么时候达到收敛,我们可以设置一个阈值ε,当迭代过程中代价函数的减少值小于这个阈值就可以认为已收敛。


四、如何选择一个合适的学习率

1.学习曲线(J(w,b)-迭代次数)

        可能出现的情况,原因可能是程序存在bug或者学习率过大

        技巧:设置一个非常小的学习率α,如果在这样的学习率下还是会有J(w,b)在迭代中增加,此时就要注意程序内是否存在bug了,这里选择非常小的学习率只是一个调试过程,用于发现程序内可能存在的bug,但不是训练学习算法最好的选择(学习率太小可能会导致需要迭代很多次才能收敛)。

2.学习率选择技巧

        可以使用下面的方式 3× 提高学习率的技巧去给算法选择合适的学习率

3.特征缩放和学习率选择实验

        C1_W2_Lab03_Feature_Scaling_and_Learning_Rate

(1)在具有多个特征的数据集上运行梯度下降,探索学习率alpha对梯度下降的影响

①多特征数据集

②导入数据集
# load the dataset
X_train, y_train = load_house_data()
X_features = ['size(sqft)','bedrooms','floors','age']
③绘制每一个特征和结果(房价)的散点分布图

        可以看出哪些特征对价格影响最大。以上,增大尺寸也会增加价格。卧室和地板似乎对价格没有太大影响。新房子比老房子价格高。

④多特征的梯度下降算法

⑤选用学习率为9.9*10^-7时,迭代10次
#set alpha to 9.9e-7
_, _, hist = run_gradient_descent(X_train, y_train, 10, alpha = 9.9e-7)

可以看到随着迭代次数增加,Cost是变大的,没有收敛

绘制图像如下:(右图只是展示了Cost和w0的关系,不代表和其他特征的关系也是如此)

⑥选择较小的学习率9.0*10^-7

可见Cost是不断下降了,但是因为学习率太大,没有收敛,一直在“左右横跳”

⑦继续缩小学习率,使用1.0*10^-7

可见效果明显变好

(2)使用z-score标准化通过特征缩放提高梯度下降的性能

z-score计算公式及各参数计算方法

②代码实现
def zscore_normalize_features(X):
    """
    computes  X, zcore normalized by column
    
    Args:
      X (ndarray): Shape (m,n) input data, m examples, n features
      
    Returns:
      X_norm (ndarray): Shape (m,n)  input normalized by column
      mu (ndarray):     Shape (n,)   mean of each feature
      sigma (ndarray):  Shape (n,)   standard deviation of each feature
    """
    # find the mean of each column/feature
    mu     = np.mean(X, axis=0)                 # mu will have shape (n,)
    # find the standard deviation of each column/feature
    sigma  = np.std(X, axis=0)                  # sigma will have shape (n,)
    # element-wise, subtract mu for that column from each example, divide by std for that column
    X_norm = (X - mu) / sigma      


    return (X_norm, mu, sigma)
 
#check our work
#from sklearn.preprocessing import scale
#scale(X_orig, axis=0, with_mean=True, with_std=True, copy=True)
③标准化过程及效果

房屋年龄和面积都归一化后散点分布更加均匀了

④比较原始数据和标准化处理后的各特征值x
# normalize the original features
X_norm, X_mu, X_sigma = zscore_normalize_features(X_train)
print(f"X_mu = {X_mu}, \nX_sigma = {X_sigma}")
print(f"Peak to Peak range by column in Raw        X:{np.ptp(X_train,axis=0)}")   
print(f"Peak to Peak range by column in Normalized X:{np.ptp(X_norm,axis=0)}")

观察图像,标准化处理前后范围变化:

注意,上面规范化数据的范围以0为中心,大致为+/- 1。最重要的是,每个特征的范围是相似的。

⑤用标准化处理后的数据重新执行梯度下降算法

注意alpha的值要大得多,这将加速下降

w_norm, b_norm, hist = run_gradient_descent(X_norm, y_train, 1000, 1.0e-1, )

 在上一章的最后我们使用原始的方法进行计算:

四、多特征的线性回归模型-CSDN博客文章浏览阅读1.3k次,点赞41次,收藏17次。在本文中介绍了多特征的线性回归模型的应用场景、多特征的线性回归模型梯度下降法、多特征变量的向量表示并强调了向量化操作在效率提升上的重要性。接着,文章详细比较了单特征和多特征梯度下降的区别,以及传统设置变量法与向量表示的异同。最后,通过实际实验,展示了如何运用numpy包对向量或矩阵的各种处理操作,如何运用多特征的线性回归模型梯度下降法迭代计算令代价最小的多个特征参数的值。整篇文章系统地概述了梯度下降在多元线性回归中的应用。https://blog.csdn.net/hehe_soft_engineer/article/details/139449052#t21

上面使用原始数据计算在1000次后还没有收敛,可以看到在标准化处理后进行训练300次后就达到了收敛,收敛速度比较快。

⑥使用训练好的模型进行预测

注意:生成我们的模型的目的是用它来预测数据集中不存在的房价。让我们来预测一套拥有1200平方英尺、3间卧室、1层楼、40年历史的房子的价格。回想一下,你必须用归一化训练数据时得到的均值和标准差来归一化新的输入数据。

# First, normalize out example.
x_house = np.array([1200, 3, 1, 40])
x_house_norm = (x_house - X_mu) / X_sigma
print(x_house_norm)
x_house_predict = np.dot(x_house_norm, w_norm) + b_norm
print(f" predicted price of a house with 1200 sqft, 3 bedrooms, 1 floor, 40 years old = ${x_house_predict*1000:0.0f}")

⑦J(w,b)等值线图下观察标准化对梯度下降算法效果

在下面的J(w,b)等值线图中,参数的比例是匹配的。左边的图是归一化特征前的w[0]平方英尺与w[1]的卧室数量对比图。这幅图太不对称了,无法看到补全轮廓的曲线。相反,当特征归一化后,代价轮廓更加对称。结果是,在梯度下降过程中对参数的更新可以对每个参数的变化取得相似的效果。

4.总结

        选择学习率是训练许多学习算法的重要组成部分,通过理论和实验的学习帮助我们用科学的方式为梯度下降选择一个好的学习率,了解不同的学习率选择对模型训练带来的效果,在直觉上也有助于我们更好的理解如何选择一个好的学习率。


五、特征工程和多项式回归

1.特征工程

    通过直觉或者对问题专业知识的理解去设计新的特性,通常的方式是通过转换或者结合问题的原始特征来完成,目的是让学习算法更容易做出准确合理的预测。

比如刚开始f(x)只是使用长和宽作为特征来构造线性回归模型,但是发现长×宽=面积引入后,面积更能决定房价,所以我们就可以完善我们的模型,将面积作为特征引入。

2.多项式回归(也是很重要的回归模型)

下面根据数据可以选择不同的模型来训练,有的效果好,有的效果差

3.特征工程和多项式回归实验

C1_W2_Lab04_FeatEng_PolyReg:探索特征工程和多项式回归,它允许你使用线性回归的机制来拟合非常复杂,甚至非线性的函数。

(1)没有进行特征工程的线性回归模型

x数据集使用的0~20之间的整数,y数据集对每个x计算:y=1+x^{2}

# create target data
x = np.arange(0, 20, 1)
y = 1 + x**2
X = x.reshape(-1, 1)

model_w,model_b = run_gradient_descent_feng(X,y,iterations=1000, alpha = 1e-2)

plt.scatter(x, y, marker='x', c='r', label="Actual Value"); plt.title("no feature engineering")
plt.plot(x,X@model_w + model_b, label="Predicted Value");  plt.xlabel("X"); plt.ylabel("y"); plt.legend(); plt.show()

用训练模型去对训练数据集预测,可以看到线性的模型并不能描述真实数据

(2)使用梯度下降的方式去训练多项式回归模型

设置模型为y=wx^{2}+b

# create target data
x = np.arange(0, 20, 1)
y = 1 + x**2

# Engineer features 
X = x**2      #<-- added engineered feature

X = X.reshape(-1, 1)  #X should be a 2-D Matrix
model_w,model_b = run_gradient_descent_feng(X, y, iterations=10000, alpha = 1e-5)

plt.scatter(x, y, marker='x', c='r', label="Actual Value"); plt.title("Added x**2 feature")
plt.plot(x, np.dot(X,model_w) + model_b, label="Predicted Value"); plt.xlabel("x"); plt.ylabel("y"); plt.legend(); plt.show()

多项式模型预测效果和训练数据拟合,效果很好

(3)使用三次多项式回归模型训练

        y=w_{1}x+w_{2}x^{2}+w_{3}x^{3}+b

特征值为一次项,二次项,三次项

# create target data
x = np.arange(0, 20, 1)
y = x**2

# engineer features .
X = np.c_[x, x**2, x**3]   #<-- added engineered feature

还是使用梯度下降法训练:

model_w,model_b = run_gradient_descent_feng(X, y, iterations=10000, alpha=1e-7)

plt.scatter(x, y, marker='x', c='r', label="Actual Value"); plt.title("x, x**2, x**3 features")
plt.plot(x, X@model_w + model_b, label="Predicted Value"); plt.xlabel("x"); plt.ylabel("y"); plt.legend(); plt.show()

拟合的三次多项式:效果并不如二次多项式好

(4)从另一个角度来考虑选择什么样的模型更好的拟合训练数据

对x轴进行标度变换为X(大写),如果变换后的y和X(大写)满足线性关系,那么说明对x轴进行标度变换的函数就是比较好的回归模型

下面就是选择使用X=x,X=x^2,X=x^3作为标度变换模型来看y与标度变化后的X之间的关系:

# create target data
x = np.arange(0, 20, 1)
y = x**2

# engineer features .
X = np.c_[x, x**2, x**3]   #<-- added engineered feature
X_features = ['x','x^2','x^3']
fig,ax=plt.subplots(1, 3, figsize=(12, 3), sharey=True)
for i in range(len(ax)):
    ax[i].scatter(X[:,i],y)
    ax[i].set_xlabel(X_features[i])
ax[0].set_ylabel("y")
plt.show()

很明显,经过x^2的标度变化后,y与X满足线性关系

(5)使用特征缩放对x,x^2,x^3进行处理以后的效果

使用z-score算法对特征进行缩放

# create target data
x = np.arange(0,20,1)
X = np.c_[x, x**2, x**3]
print(f"Peak to Peak range by column in Raw        X:{np.ptp(X,axis=0)}")

# add mean_normalization 
X = zscore_normalize_features(X)     
print(f"Peak to Peak range by column in Normalized X:{np.ptp(X,axis=0)}")

使用缩放后的值进行模型训练:(注意预测的输入值也要进行缩放处理

x = np.arange(0,20,1)
y = x**2

X = np.c_[x, x**2, x**3]
X = zscore_normalize_features(X) 

model_w, model_b = run_gradient_descent_feng(X, y, iterations=100000, alpha=1e-1)

plt.scatter(x, y, marker='x', c='r', label="Actual Value"); plt.title("Normalized x x**2, x**3 feature")
plt.plot(x,X@model_w + model_b, label="Predicted Value"); plt.xlabel("x"); plt.ylabel("y"); plt.legend(); plt.show()

(6)使用特征工程还可以对复杂场景进行函数建模

对于完全拟合的函数y=cos(x)产生的数据集,我们使用复杂的多项式对这个数据集进行拟合

x = np.arange(0,20,1)
y = np.cos(x/2)

X = np.c_[x, x**2, x**3,x**4, x**5, x**6, x**7, x**8, x**9, x**10, x**11, x**12, x**13]
X = zscore_normalize_features(X) 

model_w,model_b = run_gradient_descent_feng(X, y, iterations=1000000, alpha = 1e-1)

plt.scatter(x, y, marker='x', c='r', label="Actual Value"); plt.title("Normalized x x**2, x**3 feature")
plt.plot(x,X@model_w + model_b, label="Predicted Value"); plt.xlabel("x"); plt.ylabel("y"); plt.legend(); plt.show()

拟合效果图示:

4.总结

        本小节通过基础知识讲解和实验学习了线性回归如何使用特征工程为复杂的、甚至高度非线性的函数建模;认识到在进行特征工程时应用特征缩放的重要性。


六、本章小结

        本章通过理论和实验的学习帮助我们用科学的方式为梯度下降选择一个好的学习率,了解不同的学习率选择对模型训练带来的效果,在直觉上也有助于我们更好的理解如何选择一个好的学习率。

        又通过基础知识讲解和实验学习了线性回归如何使用特征工程为复杂的、甚至高度非线性的函数建模,认识到在进行特征工程时应用特征缩放的重要性。


欢迎大家交流学习,如有错误请批评指正!

下一章将学习:分类相关内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/709859.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用docker构建自己的镜像并推送到远程镜像仓库

这里镜像仓库使用阿里云仓库&#xff0c;其他仓库可能类似&#xff0c;可以参考&#xff0c;个人实例可以免费使用。 背景 遇到的问题&#xff1a;需要定制一个自己的镜像&#xff0c;在上面安装一些环境&#xff0c;然后将镜像托管到公共镜像仓库&#xff0c;在其他地方使用…

14.基于人类反馈的强化学习(RLHF)技术详解

基于人类反馈的强化学习&#xff08;RLHF&#xff09;技术详解 RLHF 技术拆解 RLHF 是一项涉及多个模型和不同训练阶段的复杂概念&#xff0c;我们按三个步骤分解&#xff1a; 预训练一个语言模型 (LM) &#xff1b;训练一个奖励模型 (Reward Model&#xff0c;RM) &#xf…

理解Es的DSL语法(一):查询

目录 DSL相关联的基本概念 ElasticSearch的字段类型 ElasticSearch的查询类型 DSL语法 query 普通查询 布尔查询 字符串构建查询 _source from和size sort 关于sort和查询的相关性评分 关于sort的性能 DSL相关联的基本概念 Es的DSL并不是独立的知识点&#xff…

Postman接口测试/接口自动化实战教程

一、API 自动化测试 Postman 最基本的功能用来重放请求&#xff0c;并且配合良好的 response 格式化工具。 高级点的用法可以使用 Postman 生成各个语言的脚本&#xff0c;还可以抓包&#xff0c;认证&#xff0c;传输文件。 仅仅做到这些还不能够满足一个系统的开发&#x…

【SQLAlChemy】表之间的关系,外键如何使用?

表之间的关系 数据库表之间的关系分为三种&#xff1a; 一对一关系&#xff08;One-to-One&#xff09;&#xff1a;在这种关系中&#xff0c;表A的每一行都与表B的一行关联&#xff0c;反之亦然。例如&#xff0c;每个人都有一个唯一的社保号&#xff0c;每个社保号也只属于…

基于MCU平台的HMI开发的性能优化与实战(上)

随着汽车座舱智能化的不断演进&#xff0c;车内显示设备的数量显著增加&#xff0c;从传统的仪表盘和中控屏扩展至空调控制、扶手、副驾驶区域以及抬头显示&#xff08;HUD&#xff09;等多样化的显示单元。为了有效支持这些功能单元&#xff0c;同时控制整车成本&#xff0c;越…

59.指向指针的指针(二级指针)

目录 一.什么是指向指针的指针 二.扩展 三.视频教程 一.什么是指向指针的指针 我们先看回顾一下指针&#xff1a; #include <stdio.h>int main(void) {int a 100;int *p &a;printf("*p is %d\n",*p);return 0;} 解析&#xff1a; 所以printf输出的结…

最长连续序列

题目&#xff1a;最长连续序列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 解题思路&#xff1a; 思路一:先排序&#xff0c;然…

49.Chome浏览器有三种清缓存方式

49.Chome浏览器有三种清缓存方式&#xff1a;正常重新加载、硬件重新加载、清空缓存并硬性重新加载 1、【正常重新加载】 触发方式&#xff1a;①F5  ②CtrlR  ③在地址栏上回车  ④点击链接 如果缓存不过期会使用缓存。这样浏览器可以避免重新下载JavaScript文件、图像、…

如何应对生活中的不确定性:仁者安仁,知者利仁。

有较高自尊水平的人&#xff0c;接近于孔子说的&#xff1a;仁者。 ——— 有着稳定的高自尊&#xff0c;无论外在环境如何变化&#xff0c;对其影响都不大&#xff0c;他能够愉快地生活。 相反&#xff1a;一个人处于低自尊状态&#xff0c;就会活得很痛苦&#xff0c;对自己…

Visual Studio Code连接VMware虚拟机

1.安装VS Code插件 在拓展中安装插件 Remote-SSH 2.在虚拟机中安装OpenSSH服务器 使用超级用权限(root)更新软件包列表&#xff0c;Debian系统和Ubuntu系统使用apt包管理工具&#xff1a; sudo apt update CentOS系统使用yum或dnf包管理工具&#xff1a; sudo yum update …

LeetCode | 434.字符串中的单词数

这道题直接使用语言内置的 split 函数可直接分离出字符串中的每个单词&#xff0c;但是要注意区分两种情况&#xff1a;1、空串&#xff1b;2、多个空格连续&#xff0c;分割后会出现空字符的情况&#xff0c;应该舍弃 class Solution(object):def countSegments(self, s):&qu…

C++青少年简明教程:C++的指针入门

C青少年简明教程&#xff1a;C的指针入门 说到指针&#xff0c;就不可能脱离开内存。了解C的指针对于初学者来说可能有些复杂&#xff0c;我们可以试着以一种简单、形象且易于理解的方式来解释&#xff1a; 首先&#xff0c;我们可以将计算机内存想象成一个巨大的有许多格子的…

论文阅读:H-ViT,一种用于医学图像配准的层级化ViT

来自CVPR的一篇文章&#xff0c;https://openaccess.thecvf.com/content/CVPR2024/papers/Ghahremani_H-ViT_A_Hierarchical_Vision_Transformer_for_Deformable_Image_Registration_CVPR_2024_paper.pdf 用CNNTransformer混合模型做图像配准。可变形图像配准是一种在相同视场…

windows上安装redis,并且用pycharm联通调用测试

在 Windows 上启动 Redis&#xff0c;官网版本不支持windows直接安装&#xff0c;你可以按照以下步骤进行操作&#xff1a; 使用Github Redis 版本启动 Redis 如果你想使用 Redis 在 Windows 上启动 Redis&#xff0c;以下是基本的步骤&#xff1a; 下载 Redis&#xff1a; 访…

Commons-Collections篇-CC4链分析

前言 因为 CommonsCollections4 除 4.0 的其他版本去掉了 InvokerTransformer 继承 Serializable&#xff0c;导致该方法无法序列化。 同时 CommonsCollections 4的版本 TransformingComparator 继承了 Serializable接口&#xff0c;而CommonsCollections 3里是没有的&#xf…

【中台】数字中台整体建设技术方案(doc原件获取)

1. 中台概念 2. 推动企业组织模式演进 3. 建设方法 4 .中台内容 5. 数据安全体系 中台内容围绕数据中台建设评估、整体框架、数据采集&#xff0c;结构化、半结构化、非结构化的数据采集&#xff0c;数据计算能力、存储计算引擎、数据架构、数据挖掘、各种不同数据层建设、模型…

火爆全网《pvz植物大战僵尸杂交版》最新安装包,支持Android、Windows、iOS!

我是阿星&#xff0c;今天跟大家聊聊最近在B站火得一塌糊涂的老游戏——《植物大战僵尸》。你没听错&#xff0c;就是那个曾经让我们熬夜奋战&#xff0c;一关又一关的游戏。 话说回来&#xff0c;这游戏怎么就突然又火起来了呢&#xff1f; 原来&#xff0c;是因为它的最新整…

54.Python-web框架-Django-免费模板django-datta-able

1.Datta Able Django介绍 Detta Able Djiango是什么 Datta Able Django 是一个由AppSeed提供的开源Django管理面板&#xff0c;基于现代设计&#xff0c;为开发者提供了一流的功能和优雅的界面。它源自CodedThemes的高风格化Bootstrap 4模板——Datta Able Bootstrap Lite&…

手机在网状态-手机在网状态查询-手机在网站状态接口

查询手机号在网状态&#xff0c;返回正常使用、停机、未启用/在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态 直连三大运营商&#xff0c;实时更新&#xff0c;可查询实时在网状态 高准确率-实时更新&#xff0c;准确率99.99% 接口地址&…