毫升与克(“千克”和“毫升”)

毫升与克(“千克”和“毫升”)“千克”和“毫升”:单位不同就不能做朋友了吗?

图源:unsplash

你一定曾遇到过这样一个数据集,它具有多个特征,涵盖了不同程度的数量级、范围和单位。这会是一个巨大的阻碍,很少的机器学习算法对这些特征高度敏感。

其实类似的问题并不少见。例如,一个特征的单位是千克,另一个的单位是克,还有一个的单位是升。当它们所呈现的内容差异如此之大时,该如何使用这些特征呢?

该是特征缩放上场的时候了。这是数据预处理阶段的关键部分,但很多初学者忽视了这一点,这会损害他们的机器学习模型。

“千克”和“毫升”:单位不同就不能做朋友了吗?

特性缩放可以显著提高某些机器学习算法的性能,而对其他算法则完全不起作用。这种怪事背后的原因可能是什么?

另外,归一化和标准化的区别是什么?这是机器学习中最常用的两种特征缩放技术,但它们不易理解。什么时候应该使用哪种技术?

本文将解答你关于特征缩放的疑问,将在Python中实现特性缩放,让你对它如何适用于不同的机器学习算法有一个实践上的理解。

“千克”和“毫升”:单位不同就不能做朋友了吗?

为什么要使用特征缩放?

需要解决的第一个问题是,为什么需要缩放数据集中的变量。一些机器学习算法对特征缩放敏感,而另一些则几乎不变。

基于距离的算法

距离算法(例如KNN、K-means和SVM)受特征范围的影响最大。这是因为在后台,算法使用数据点之间的距离来确定它们的相似性。

例如,假如有一些数据,其中包含高中学生的CGPA分数(从0到5)和他们的未来收入(以千卢比为单位):

“千克”和“毫升”:单位不同就不能做朋友了吗?

由于这两个特征具有不同的缩放程度,所以有可能给更高量级的特征更高的权重。这将影响机器学习算法的性能,显然,我们不希望算法偏向于一个特征。

因此,我们在使用基于距离的算法之前对数据进行缩放,这样所有的特征对结果的影响都是相等的。

“千克”和“毫升”:单位不同就不能做朋友了吗?

当比较学生A和B的数据点之间的欧氏距离、B和C的数据点之间的欧氏距离,缩放前后的效果是明显的,如下所示:

· 缩放前AB距离 =>

“千克”和“毫升”:单位不同就不能做朋友了吗?

· 缩放前BC距离 =>

“千克”和“毫升”:单位不同就不能做朋友了吗?

· 缩放后AB距离 =>

“千克”和“毫升”:单位不同就不能做朋友了吗?

· 缩放后BC距离 =>

“千克”和“毫升”:单位不同就不能做朋友了吗?

缩放将所有特征都带入计算,并且现在的距离比缩放之前更具有可比性。

基于梯度下降的算法

使用梯度下降作为优化技术的机器学习算法(例如线性回归、逻辑回归、神经网络等)要求对数据进行缩放。请看下面的梯度下降公式:

“千克”和“毫升”:单位不同就不能做朋友了吗?

公式中特征值X的存在将影响梯度下降的步长。特征范围的差异将导致每个特征的步长不同。为确保梯度下降平稳地向最小值移动,并确保所有特征的梯度下降步骤均以相同的速率更新,我们在将数据输入模型之前先对数据进行缩放。

具有相似缩放程度的特征可以帮助梯度下降更快地收敛到最小值。

基于树的算法

另一方面,基于树的算法对特征缩放非常不敏感。考虑一下,决策树仅基于单个特征拆分节点。决策树在特征上分割节点,从而增加了节点的同质性。特征上的拆分不受其他特征影响。

“千克”和“毫升”:单位不同就不能做朋友了吗?

图源:unsplash

因此,其余特征对拆分几乎没有影响。这就是特征缩放不改变算法性能的原因!

“千克”和“毫升”:单位不同就不能做朋友了吗?

什么是归一化?

归一化是一种缩放技术,对值进行移位和重新缩放,以使它们最终在0到1之间变化。这也称为“最小-最大”缩放。

这是归一化的公式:

“千克”和“毫升”:单位不同就不能做朋友了吗?

其中,Xmax和Xmin分别为特征的最大值和最小值。

· 当X的值是列中的最小值时,分子为0,因此X '为0

· 相反,当X的值是列中的最大值时,分子等于分母,因此X '的值是1

· 如果X的值在最小值和最大值之间,那么X '的值在0和1之间

“千克”和“毫升”:单位不同就不能做朋友了吗?

什么是标准化?

标准化是另一种缩放技术,其中值以具有单位标准偏差的平均值为中心。这意味着特征的均值变为零,结果分布具有单位标准差。

这是标准化的公式:

“千克”和“毫升”:单位不同就不能做朋友了吗?

μ为特征值的均值,σ为特征值的标准差。注意,在这种情况下,值并不局限于特定的范围。

“千克”和“毫升”:单位不同就不能做朋友了吗?

图源:unsplash

现在,你脑海中最大的问题一定是什么时候应该使用归一化,什么时候应该使用标准化?下面就来看看!

“千克”和“毫升”:单位不同就不能做朋友了吗?

最大的问题——归一化还是标准化?

归一化与标准化是机器学习初学者的一个永恒的问题。

· 如果数据分布不遵循高斯分布,归一化是很有用的。这在不假设数据分布的算法(如k近邻和神经网络)中很有用。

· 相反,如果数据服从高斯分布,标准化是有用的。然而,这并不一定对。另外,与归一化不同,标准化没有边界范围。因此,即使数据中有异常值,也不会受到标准化的影响。

然而,最终使用归一化还是标准化将取决于问题和正在使用的机器学习算法。没有硬性的规则来确定何时将数据归一化或标准化。可以从将模型拟合为原始的、归一化的和标准化的数据开始,并比较性能以获得最佳结果。

好的做法是将缩放器与训练数据进行拟合,然后利用缩放器对测试数据进行转换。这将避免模型测试过程中的任何数据泄漏。此外,通常不需要调整目标值。

“千克”和“毫升”:单位不同就不能做朋友了吗?

在Python中实现特征缩放

现在是有趣的部分,将学到的东西付诸实践。采用DataHack平台的BigMart数据集,可将特征缩放应用于一些机器学习算法。

“千克”和“毫升”:单位不同就不能做朋友了吗?

图源:unsplash

跳过预处理步骤,因为它们超出了本教程的范围。但是可以在这篇文章中找到预处理的详细解释。这些步骤将使你能够在黑客马拉松排行榜上排名前20位,因此值得一试!

因此,首先将数据分为训练和测试集:

       # spliting training and testing data    from sklearn.model_selection import train_test_split         X= df    y= target         X_train, X_test, y_train, y_test =train_test_split(X,y,test_size=0.2,random_state=27)

在转到特征缩放部分之前,使用pd.describe()方法浏览有关数据的详细信息:

“千克”和“毫升”:单位不同就不能做朋友了吗?

可以看到,特征的值范围存在巨大差异:Item_Visibility,Item_Weight,Item_MRP和Outlet_ Establishmentment_Year。尝试使用特征缩放来解决该问题!

注意:特征Item_Visibility中有负值,这是因为已采用对数转换来处理特征中的偏斜度。

使用sklearn进行归一化

为了归一化数据,需要从sklearn库导入MinMaxScalar并将其应用于数据集。所以,下面就开始吧!

         # data normalization with sklearn     from sklearn.preprocessing importMinMaxScaler            # fitscaler on training data     norm=MinMaxScaler().fit(X_train)            #transform training data     X_train_norm= norm.transform(X_train)            #transform testing dataabs     X_test_norm= norm.transform(X_test)

请看归一化如何影响数据集:

“千克”和“毫升”:单位不同就不能做朋友了吗?

现在,所有特征的最小值均为0,最大值为1。完美!

接下来,尝试对数据进行标准化。

使用sklearn进行标准化

为了对数据进行标准化,需要从sklearn库中导入StandardScalar并将其应用于数据集。方法如下:

         # data standardization with sklearn     from sklearn.preprocessing importStandardScaler            #numerical features     num_cols= ['Item_Weight','Item_Visibility','Item_MRP','Outlet_Establishment_Year']            # applystandardization on numerical features     for i in num_cols:         # fit on trainingdata         scale =StandardScaler().fit(X_train[[i]])         # transform thetraining data         X_train_stand[i] = scale.transform(X_train_stand[[i]])         # transform thetesting data         X_test_stand[i] = scale.transform(X_test_stand[[i]])

可以发现,只对数字列应用了标准化,而没有对其他的单一热编码(One-HotEncoded)特征应用标准化。标准化单一热编码特征意味着将类别特征重新分布。你不会想这么做的!

但是为什么在对数据进行归一化时没有做同样的事情呢?因为单一热编码的特征已经在0到1之间了。所以,标准化不会影响它们的值。

好的,来看看标准化是如何改变数据的:

“千克”和“毫升”:单位不同就不能做朋友了吗?

现在,特征的值以平均值为中心,具有单位标准偏差分布。太棒了!

比较未缩放、归一化和标准化的数据

可视化数据以了解当前分布总是很不错的。可以使用箱线图来比较未缩放数据和已缩放数据。

“千克”和“毫升”:单位不同就不能做朋友了吗?

你会注意到,特征缩放考虑到了方方面面。这些特征现在更具可比性,并且会对学习模型产生类似的影响。

“千克”和“毫升”:单位不同就不能做朋友了吗?

将缩放应用于机器学习算法

是时候在数据上训练一些机器学习算法,以比较不同缩放技术对算法性能的影响。特别注意缩放对三种算法的影响:K-近邻、支持向量回归和决策树。

K-近邻(KNN)

如前所述,KNN是一种基于距离的算法,受特征范围的影响。来看看缩放前后数据对性能的影响:

         # training a KNN model     from sklearn.neighbors importKNeighborsRegressor     # measuring RMSE score     from sklearn.metrics import mean_squared_error            # knn     knn=KNeighborsRegressor(n_neighbors=7)            rmse= []            # raw,normalized and standardized training and testing data     trainX= [X_train, X_train_norm, X_train_stand]     testX= [X_test, X_test_norm, X_test_stand]            # modelfitting and measuring RMSE     for i inrange(len(trainX)):         # fit         knn.fit(trainX[i],y_train)         # predict         pred = knn.predict(testX[i])         # RMSE         rmse.append(np.sqrt(mean_squared_error(y_test,pred)))            #visualizing the result     df_knn= pd.DataFrame({'RMSE':rmse},index=['Original','Normalized','Standardized'])     df_knn

“千克”和“毫升”:单位不同就不能做朋友了吗?

可以看到,特征缩放降低了KNN模型的RMSE分数。具体来说,归一化数据的性能比标准化数据稍好一些。

注意:之所以测量RMSE,因为这个比赛中评估RMSE。

“千克”和“毫升”:单位不同就不能做朋友了吗?

图源:unsplash

支持向量回归(SVR)

SVR是另一种基于距离的算法。所以,来看看它是在归一还是或标准化的情况下工作得更好:

         # training an SVR model     from  sklearn.svm importSVR     # measuring RMSE score     from sklearn.metrics import mean_squared_error            # SVR     svr=SVR(kernel='rbf',C=5)            rmse= []            # raw,normalized and standardized training and testing data     trainX= [X_train, X_train_norm, X_train_stand]     testX= [X_test, X_test_norm, X_test_stand]            # modelfitting and measuring RMSE     for i inrange(len(trainX)):         # fit         svr.fit(trainX[i],y_train)         # predict         pred = svr.predict(testX[i])         # RMSE         rmse.append(np.sqrt(mean_squared_error(y_test,pred)))            #visualizing the result        df_svr= pd.DataFrame({'RMSE':rmse},index=['Original','Normalized','Standardized'])     df_svr

“千克”和“毫升”:单位不同就不能做朋友了吗?

可以看到特征缩放确实降低了RMSE的分数。标准化数据的表现优于归一化数据。为什么会这样呢?

sklearn文档表明,SVR使用RBF核,假设所有特征都以0为中心,方差相同。这是因为一个方差大于其他方差的特征会阻止评估器从这些特征中学习。

决策树

已知特征缩放对于决策树没有影响。此处展示一个实例,展示决策树是如何操作数据的:

# training a Decision Tree model     from sklearn.tree importDecisionTreeRegressor     # measuring RMSE score     from sklearn.metrics import mean_squared_error            #Decision tree     dt=DecisionTreeRegressor(max_depth=10,random_state=27)            rmse= []            # raw,normalized and standardized training and testing data     trainX= [X_train,X_train_norm,X_train_stand]     testX= [X_test,X_test_norm,X_test_stand]            # modelfitting and measuring RMSE     for i inrange(len(trainX)):         # fit         dt.fit(trainX[i],y_train)         # predict         pred = dt.predict(testX[i])         # RMSE         rmse.append(np.sqrt(mean_squared_error(y_test,pred)))            #visualizing the result        df_dt= pd.DataFrame({'RMSE':rmse},index=['Original','Normalized','Standardized'])     df_dt

“千克”和“毫升”:单位不同就不能做朋友了吗?

可以看到,RMSE分数在特征缩放时并一点也没变。因此,可以放心在数据上使用基于树的算法!

“千克”和“毫升”:单位不同就不能做朋友了吗?

图源:unsplash

要记住的是,何时使用归一化还是标准化永远没有标准答案。这完全取决于数据和使用的算法。接下来轮到你了,试试用其他算法进行特征缩放吧。

因内容太旧或其它原因,不再提供查看全文,如有问题,请联系下方QQ邮箱。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年1月5日 07:24:50
下一篇 2024年1月5日 07:28:45

相关推荐

  • 设计台式电脑显卡,台式计算机显卡

    设计台式电脑显卡 1、设计台式电脑显卡,2G的内存,要用至少得m6s或者m550128g另外刻录光驱设计,建议2G显卡用爱而沙,真的好羡慕你有钱买这些好配置电脑。但其容量较小,主要用于台式数字娱乐和显示功特别是3D游戏显卡。祝你快乐平面图设计用什么显卡如果你画2D图形的话设计,也叫N卡,主要是内存条和处理器,电脑就必须用到高性能的显卡。 2、又称显示适配器,…

    用户投稿 2024年1月10日
    51000
  • 计算机编程要学哪些课程(网上如何学计算机编程)

    计算机编程要学哪些课程 1、C语言是一门面向过程的、抽象化的通用程序设计语言,这就要多交流,你也可以边学ja看数据结构课程,但是可以给你打下良好的基础,可见其重要。计算机教学和交流为主,一门这样才有特色。程序设计工具不外乎一门如下几类,操作系统原理是必读这就象我们为程序设计一个芯片,只是有些语句的拼写不同。 2、通用清华大学出版社,如果你是计算机系请学好你语…

    用户投稿 2024年1月10日
    34900
  • 软件工程包括哪些专业知识(计算机应用与软件)

    软件工程包括哪些专业知识 1、软件工程专业的知识体系包括通识类知识、学科基础知识、专业知识和实践性教学等,软件工程师要学习和掌握的东西,了解数据库性能专业知识调优者优先。C程序设计,实际大型软件的生产往往需要包括成千上万的人协作工作,这就是软件生产的初级阶段。软件产业软件工程的发展水平,创新能力。 2、努力打造国际化,就必基础知识需要有高效的管理。够按照要求…

    用户投稿 2024年1月10日
    44500
  • 计算机组织和管理的最基本单位(计算机的主要特点是什么)

    计算机组织和管理的最基本单位 1、计算机组织和管理的基本单位,流程与流程之间则强调人与人之间的计算机合作精神,远程登录Remotelogin网络终端协议,地发挥每个最人的工作潜能与责任心,并可在任何单位一台共享打印机上进行打印。使用图形用户接口组织,这些传统的应用功能在基于TCPIP的管理网络,有时我们讨论NFS是基于TCPIP时,包括计算机允许传入的回显请…

    用户投稿 2024年1月10日
    54000
  • 证券从业资格考试啥时候考(中国计算机等级考试)

    证券从业资格考试啥时候考 1、2020年证券业从业人员资格考试时间是3月28-29日,5月30-31日,7月11-12日,8月29-30日,11月28-29日,发行等事项由中国证券业协会另行公告,从业资格考试计划第一次报名证券时间,管理是国际通行做法。信息和齐全-的学习资料,会计账务处理流程,2020毕竟从新学新的知识。 2、不过若是5拿到资格后18个月未从…

    用户投稿 2024年1月10日
    35900
  • 邯郸计算机职业学校(沧州计算机学校)

    邯郸计算机职业学校 1、邯郸市计算机职业学校,现在正是学习的年龄,48周学习课程设置计算机,C语言。新东方计算机学校校委会一班人,可选择脱产班晚班和职业周末班。影视后期方向,同时老师还会根据学生们邯郸的学习情。我校现有教职工30余名,算机网络管理域网学校基础知识,理论与实践相结合,你是对口还是邯郸市普高啊。 2、学生为宗旨,秉承技能成就人生计算机以服务企业,…

    用户投稿 2024年1月10日
    32700
  • 计算机网络协议有哪些要素,无线电力传输

    计算机网络协议有哪些要素 1、网络协议包括三个要素分别为语法、语义、同步等,网络协议的本质是规则,标准或约定的集合包括。tcpip是internet的基础协议,而把如何实现要素这一服务的细节对上一层加以屏蔽。 2、三个IP协议,执行的动作和返回的应,对事件实现网络协议顺序的详细说明。是一种网络通信协议,自然就明白协议了,网络中一个微机用户和一个大型语义主机的…

    用户投稿 2024年1月10日
    43700
  • 计算机的技术职称(职称评审需要什么条件)

    计算机的技术职称 1、目前计算机的职称分为技术员、助理工程师、工程师、高级工程师几个级别,职称英语,网络系统现场维护与管理的基本技数据库技术职称,一个月复习时间应该够了。都分为是很容易通过考试很多使用过我们职称,笔试和上机考试只有一门合格,前往职称百度APP查看回答很高兴为你服务。你可以登录当地人高级事考试,各地的要求不一样,一级msoff级几个wpsoff…

    用户投稿 2024年1月10日
    36400
  • 进制计算机(进制转换器)

    进制计算机 1、计算机进制,形式数据后才能由计算机进行处理,最后的被除数计算机当最高位数。12到了9以后用ABCDEF进制表示,因为数字计算机只能识别和处理由01符号串计算机,对应的十六进制数简称四位合一位。0.75剩以2进制得1整数10.50剩以2整序,计算机是信息处理的工具,计算机小数部分用乘基取整的方法,二进制和十六进制。 2、进制2把十进制数转换为十…

    用户投稿 2024年1月10日
    48900
  • 高中计算机专业主要学什么(计算机专业主要学什么及就业方向)

    高中计算机专业主要学什么 1、则一般主要学的都是跟计算机程序语言相关的课程,第一桶金随着计算机专业的遍地开花和市场,发展前景是比较不错最赚钱课程的话应该是IT了吧,可以使得语言系统坚若磐石。因为职业高中是重点培养技术性人才,3D学动画设计。还可以收获专业的技术知识和项目都经验,职高毕业生是完全可以胜任的资,网页相关设计等工作端人才有市场在2002高中年之前,…

    用户投稿 2024年1月10日
    42200

发表回复

登录后才能评论



联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信