python机器学习(二)特征工程、K-近邻算法、KNN工作流程、scikit-learn实现K近邻算法、K值选择、距离计算、KD树

news2024/10/7 6:47:20

特征工程

把特征转换为机器容易识别的数据,把特征a转化为机器容易读懂、量化的语言

归一化Min-Max

将原始数据映射到[0,1]之间
X ′ = x − m i n m a x − m i n X'= \frac{x-min}{max-min} X=maxminxmin
但是归一化是有弊端的,比如有一个值错误,就会影响整体的数值,并且归一化是无法解决这个异常值。所以归一化只适合传统精确小数据场景。

标准化

通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内。也就是服从正态分布的数据。
X ′ = x − m e a n σ X'=\frac{x-mean}{\sigma} X=σxmean

K-近邻算法(K-Nearest Neighboor)

定义

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

理念

取近的邻居,本质为近朱者赤近墨者黑,比如可以通过身边的住户预测本区域送外卖的是哪些人。所以就要用欧式距离计算出跟邻居的距离,找出最近的邻居(k=1)。
问题:只有1个的话数据不够精准,被噪点的干扰太强,数据有误差的话就会被完全带偏。
解决:要找k个邻居,自己写代码实现knn。knn算法也可以用于动态加载的字体反爬。

理解K近邻

已知《战狼》、《红海行动》、《碟中谍6》是动作片,而《前任3》、《春娇与志明》、《泰坦尼克号》是爱情片。每一行(一部电影)为一个数据样本,特征列为打斗次数、接吻次数,根据打斗次数和接吻次数来区分是爱情片和动作片。如果新的电影如《美人鱼》,人可以根据自己经验将电影进行分类,也可以让机器也可以掌握一个分类的规则,自动的将新电影进行分类。
在这里插入图片描述
对图中的数据进行整理,绘制散点图如下:
在这里插入图片描述

通过分析结果可以看出,动作片的打斗场景非常多,根据《美人鱼》电影的数据,可以大致判断出在图中红色圆圈的位置。现在就要判断出红色圆圈距离哪一个样本点比较近,如果距离《春娇与志明》比较近,就可以归类为爱情片,如果距离《红海行动》比较近的话就可以归类为动作片。
两点之间的直线距离最近。
在这里插入图片描述
在机器学习中说到两点之间的距离,通常指的是欧式距离,二维欧式距离公式如下:
d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 d_{12} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} d12=(x1x2)2+(y1y2)2
特征不可能说只有两个,每个特征代表一个维度,同理衍生三维欧氏距离公式如下:
d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 d_{12} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2} d12=(x1x2)2+(y1y2)2+(z1z2)2
如果是四维或者更高维度,归纳N维欧式距离公式如下:
d 12 = ∑ k = 1 n ( x i − y i ) 2 d_{12} = \sqrt{\sum_{k=1}^n(x_i-y_i)^2} d12=k=1n(xiyi)2
对距离进行精准计算,以两点(美人鱼、碟中谍6)为例进行求解,

# 美人鱼:5  29
# 碟中谍6: 105 31
np.sqrt((105-5)**2+(31-29)**2)  # 100.0199980003999

在这里插入图片描述
如果要算出最近距离,则需要算《美人鱼》与各个特征点之间的距离。从计算结果可以看出,距离《美人鱼》最近的电影是《前任3》,如果只从一个特征点去判定的话,结果可能会不精确。这时要选择更多(K值)的附近特征值进行比较,如果选择K=3,选择距离最近的3个,选择的特征值为《前任3》、《春娇与志明》、《泰坦尼克号》,这三个都是爱情电影,可以把《美人鱼》归类为爱情电影。如果选择K=4,就会出现3个爱情电影,1个动作电影,此时就选择众数,将数据归类为出现次数最多的特征里。
如果只用一个特征点的距离就判断类型的话是不可靠的,如下图
在这里插入图片描述
xiaoming其实是在二七区,但是跟B同学的距离最近,这是一个分类的问题,在K近邻算法中,以半径的方式划圈,但是并不能说xiaoming就在中原区,分类问题不能算成均值。如果选择五名同学进行计算,分别计算跟每个同学的距离,要选择类别为众数的,才能更加可靠的来判断出xiaoming所在的区域。xiaoming距离C、D同学最近,E、F同学较远,才能准确的判断xiaoming在哪个区域。

KNN工作流程

  • 计算待分类物体与其他物体之间的距离;
  • 统计距离最近的 K 个邻居;
  • 对于 K 个最近的邻居,它们属于哪个分类最多,待分类物体就属于哪一类。
    基于流程使用numpy和pandas去实现算法。
    在这里插入图片描述
    在这里插入图片描述
    用编程来实现,就要用到面向对象的编程思想,可以实现动态传参、继承等,避免了函数间的反复接受和调用,实例属性在所有的实例方法立都可以使用。要先封装一个类然后定义一个main()方法,在主程序的方法里进行实例化、调用方法的过程。
    在main()方法里读取数据后,并不能将所有的数据传进去做处理,要把数据划分为初始化的特征,训练特征:打斗次数、亲吻次数;训练目标:电影类型;预测数据;实例化类,传入训练特征、目标数据和K值。
    要把得到的数据传到类中,在类里创建初始化的方法来初始化属性。
    创建预测方法,实现预测《美人鱼》电影属于哪个分类,计算预测数据和真实数据的欧式距离,获取距离最小的前K 个值,对K个点的分类进行统计。此时统计的是当k为确定的值时得到的结果,如果要测试多个,可以进行循环遍历,k最好取奇数。

小结

  1. 计算欧式距离
  2. 取最近的k个邻居
  3. 利用numpy和pandas的广播机制,效率比python的循环要高
  4. 选择数据。
      1. df.loc[行标签,列标签],通过标签选择数据
    • 2.df.iloc[行下表,列下标],通过下标/索引选择数据
  5. 1个邻居不可靠,需要选择多个邻居,求的是类别,不是均值。

K-近邻算法api介绍

scikit-learn工具介绍

scikit-learn是基于python语言的机器学习工具。参考说明文档:http://scikitlearn.com.cn

  • Python语言是简单高效的数据挖掘和数据分析工具
  • Scikit-learn包括许多知名的机器学习算法的实现
  • Scikit-learn文档完善,容易上手,有丰富的API

scikit-learn的安装

pip3 install scikit-learn

注意:安装scikit-learn,需要提前安装numpy,Scipy等库

scikit-learn实现K近邻算法–分类问题

从sklearn包下的neighbors模块,调用所用到的KNeighborsClassifier分类器,n_neighbors为指定的K值,

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto')
n_neighbors:查询默认使用的邻居数(默认为 5) 
weights:默认为 “uniform” 表示为每个近邻分配同一权重;
可指定为 “distance” 表示分配权重与查询点的距离成反比;同时还可以自定义权重。

在这里插入图片描述

从题目中看到1-,-2是同类别的,为0类别;2,3为同类别的,为1类别。传入的1特征,选择了2个近邻,不仅会找到跟1最近的2,还会找到跟1次近的-1,此时-1和2是同权重的,根据现有的特征数据和结果去训练模型,按距离近的用 weights=‘distance’ 增加权重。

实现电影分类的案例

在这里插入图片描述

scikit-learn实现K近邻算法–总结

  • 构建特征数据与目标数据
  • 构建k个近邻的分类器(两个参数:n_neighbors,weights)
  • 使用fit进行训练
  • 预测数据

K值选择

如果 K 值比较小就相当于未分类物体与它的邻居非常接近才行。这样产生的一个问题就是,如果邻居点是个噪声点,那么未分类物体的分类也会产生误差,这样 KNN 分类就会产生过拟合。通过输入的数据去预测类别,输入的数据要与训练的实例接近才会有结果,如果只取了一个实例(k的取值过小),好比每天只练习一种题型,考试的时候遇到复杂的题型就会不知所措,只会记住自己训练出来的模板,对一种题型训练过度,就出现过拟合的现象。
如果 K 值比较大,相当于距离过远的点也会对未知物体的分类产生影响,虽然这种情况的好处是鲁棒性强,但是不足也很明显,会受到样本均衡的影响,产生欠拟合情况,也就是没有把未分类物体真正分类出来。k值过大,抗风险能力比较强,好比备考的时候,什么题型都看(海纳百川),那任何一部电影传进来,都会见过类似的。考试的知识点是初中的,备考的时候复习了小学、初中、高中、大学的内容,考试的时候就不知道用初中、高中、还是大学的知识去解题(都接触过,又都不那么深入),分不清对应的考点,就会有欠拟合的现象。
用N个K值从小到大进行测试,选择结果最好的那个K值,人为的一个一个的测试会很繁琐,可以用交叉验证。交叉验证的思路就是,把样本集中的大部分样本作为训练集,剩余的小部分样本用于预测,来验证分类模型的准确性。所以在 KNN 算法中,我们一般会把 K 值选取在较小的范围内,同时在验证集上准确率最高的那一个最终确定作为 K 值。

距离计算

  • 欧氏距离(欧几里得距离)
  • 曼哈顿距离
  • 闵可夫斯基距离
  • 切比雪夫距离
  • 余弦距离

欧式距离

欧式距离代表的是两点之间的距离作为的衍生,比如现在在408教室上课,有位同学要去隔壁的508教室,不能根据距离直接穿过去,二维欧式距离公式如下:
d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 d_{12} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} d12=(x1x2)2+(y1y2)2
衍生三维欧氏距离公式如下:
d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 d_{12} = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2} d12=(x1x2)2+(y1y2)2+(z1z2)2
归纳N维欧式距离公式如下:
d 12 = ∑ k = 1 n ( x i − y i ) 2 d_{12} = \sqrt{\sum_{k=1}^n(x_i-y_i)^2} d12=k=1n(xiyi)2

  • 涉及到开根号,就会涉及到浮点数,甚至是无线无限循环小数。在机器学习中的特征一般都是高纬(超越了3个维度)的,再涉及到小数,就会有误差,对内存的消耗很大,计算机的运行速度就会很慢。为了解决这个问题,就尽量的进行整数的计算,引入曼哈顿距离。

曼哈顿距离

在几何空间中用的比较多,比如a同学在408,b同学在512,从a到达b,中间的格子都是墙,不可能从a走绿色的线穿墙而过,最终目的也要使得路程最短。可以从a点先往上走,距离为 y 2 y_2 y2 y 1 y_1 y1的差值,然后横向走,距离为 x 2 x_2 x2 x 1 x_1 x1的差值,才能到达最终的终点。通过两段距离的和,求出两点之间的距离。
通过下图可以看出,不管如何顺着格子走,两点之间的距离是一定的。
在这里插入图片描述

二维平面两点 a ( x 1 , y 1 ) a(x_1,y_1) a(x1,y1) b ( x 2 , y 2 ) b(x_2,y_2) b(x2,y2)间的曼哈顿距离:
d 12 = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ d_{12}=| x_1-x_2 | +\mid y_1-y_2 \mid d12=x1x2+y1y2
n维空间点 a ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n}) a(x11,x12,...,x1n) b ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n}) b(x21,x22,...,x2n)的曼哈顿距离:
d 12 = ∑ k = 1 n ( x 1 k − x 2 k ) d_{12} = {\sum_{k=1}^n(x_{1k}-x_{2k})} d12=k=1n(x1kx2k)

  • 曼哈顿距离也被称为出租车几何,在城市中开车不能穿墙而过,只能根据房子周边的路线去走。在高维中进行整数计算,只用到了加减的运算,避免了小数的计算(不至于出现无线循环小数,或者是无理数),运算速度比较快,并且误差很小。

切比雪夫距离

在国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻8个方格中的任意一个。国王从格子 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)走到格子 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)最少需要走多少步?这个距离就叫切比雪夫距离。
在这里插入图片描述
从上图可以看出从2A到5C点所经过的距离,可以是先从2A走到2C(2步),然后从2C走到5C(3步);也可以是先从2A走到4C(2步),然后从4C走到5C(1步)。第二种走的步数刚好为第一中走的两部分步数的最大值。
二维平面两点 a ( x 1 , x 2 ) a(x_1,x_2) a(x1,x2) b ( x 2 , y 2 ) b(x_2,y_2) b(x2,y2)间的切比雪夫距离:
d 12 = m a x ( ∣ x 1 − x 2 ∣ , ∣ y 1 − y 2 ∣ ) d_{12}=max(| x_1-x_2 | ,\mid y_1-y_2 \mid) d12=max(x1x2,y1y2)
n维空间点 a ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n}) a(x11,x12,...,x1n) b ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n}) b(x21,x22,...,x2n)的切比雪夫距离:
d 12 = m a x ( ∣ x 1 i − x 2 i ∣ ) d_{12}=max(| x_{1i}-x_{2i} | ) d12=max(x1ix2i)

闵可夫斯基距离

闵式距离是一类距离的同城,是对多个距离度量公式的概括性的表述。闵可夫斯基距离是个通过的指标,通过变换参数来更换极限形式,
两个n维变量 a ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n}) a(x11,x12,...,x1n) b ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n}) b(x21,x22,...,x2n)的闵可夫斯基距离定义为:
d 12 = ∑ k = 1 n ∣ x 1 k − x 2 k ∣ p p d_{12} = \sqrt[p]{\sum_{k=1}^n|x_{1k}-x_{2k}|^p} d12=pk=1nx1kx2kp
其中p是一个变参数:

  • p = 1 p=1 p=1时,根号就不存在了,就是曼哈顿距离;
  • p = 2 p=2 p=2时,就是欧式距离;
  • p → ∞ p\to \infty p时,取极限的最大值,忽略最小值,就是切比雪夫距离

余弦距离

余弦距离实际上计算的是两个向量的夹角,是在方向上计算两者之间的差异,对绝对数值不敏感。sin函数是对边比斜边,cos函数是临边比斜边,引申出来两个向量之间的夹角余弦公式。夹角余弦的取值为-1到1,余弦越大就表示向量的夹角越小。
二维空间中向量 A ( x 1 , y 1 ) A(x_1,y_1) A(x1,y1)与向量 B ( x 2 , y 2 ) B(x_2,y_2) B(x2,y2)的夹角余弦公式:
c o s θ = x 1 x 2 + y 1 y 2 x 1 2 + y 1 2 x 2 2 + y 2 2 cosθ=\frac{x_1x_2+y_1y_2}{\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}} cosθ=x12+y12 x22+y22 x1x2+y1y2
两个n维样本点 a ( x 11 , x 12 , . . . , x 1 n ) a(x_{11},x_{12},...,x_{1n}) a(x11,x12,...,x1n) b ( x 21 , x 22 , . . . , x 2 n ) b(x_{21},x_{22},...,x_{2n}) b(x21,x22,...,x2n)的夹角余弦为:
c o s θ = a ⋅ b ∣ a ∣ ∣ b ∣ cosθ=\frac{a \cdot b}{|a||b|} cosθ=a∣∣bab
即: c o s ( θ ) = ∑ k = 1 n x 1 k x 2 k ∑ k = 1 n x 1 k 2 ∑ k = 1 n x 2 k 2 cos(θ)=\frac{\sum_{k=1}^nx_{1k}x_{2k}}{\sqrt{\sum_{k=1}^nx_{1k}^2}\sqrt{\sum_{k=1}^nx_{2k}^2}} cos(θ)=k=1nx1k2 k=1nx2k2 k=1nx1kx2k

  • 余弦距离也被称为余弦相似度,可以判断两个物品间的相关性,
    比如3个人去超市买物品,用表格表示,买的为1,没有买的为0。
物品人员abcde
A11001
B01100
C10001

A与B的相似度: c o s ( θ ) = 1 ∗ 0 + 1 ∗ 1 + 0 ∗ 1 + 0 ∗ 0 + 1 ∗ 0 1 2 + 1 2 + 0 2 + 0 2 + 1 2 0 2 + 1 2 + 1 2 + 0 2 + 0 2 = 1 6 = 0.408 cos(θ)=\frac{1*0+1*1+0*1+0*0+1*0}{\sqrt{1^2+1^2+0^2+0^2+1^2}\sqrt{0^2+1^2+1^2+0^2+0^2}}=\frac{1}{\sqrt{6}}=0.408 cos(θ)=12+12+02+02+12 02+12+12+02+02 10+11+01+00+10=6 1=0.408

A与C的相似度: c o s ( θ ) = 1 ∗ 1 + 1 ∗ 0 + 0 ∗ 0 + 0 ∗ 0 + 1 ∗ 1 1 2 + 1 2 + 0 2 + 0 2 + 1 2 1 2 + 0 2 + 0 2 + 0 2 + 1 2 = 2 6 = 0.816 cos(θ)=\frac{1*1+1*0+0*0+0*0+1*1}{\sqrt{1^2+1^2+0^2+0^2+1^2}\sqrt{1^2+0^2+0^2+0^2+1^2}}=\frac{2}{\sqrt{6}}=0.816 cos(θ)=12+12+02+02+12 12+02+02+02+12 11+10+00+00+11=6 2=0.816

B与C的相似度: c o s ( θ ) = 0 ∗ 1 + 1 ∗ 0 + 1 ∗ 0 + 0 ∗ 0 + 0 ∗ 1 0 2 + 1 2 + 1 2 + 0 2 + 0 2 1 2 + 0 2 + 0 2 + 0 2 + 1 2 = 0 4 = 0 cos(θ)=\frac{0*1+1*0+1*0+0*0+0*1}{\sqrt{0^2+1^2+1^2+0^2+0^2}\sqrt{1^2+0^2+0^2+0^2+1^2}}=\frac{0}{\sqrt{4}}=0 cos(θ)=02+12+12+02+02 12+02+02+02+12 01+10+10+00+01=4 0=0

由此可见,A与C的相似度较高,可以根据A用户购买的物品给与A相似度较高的C进行推荐。

KD树

有位置的数据想要去预测类别,找到跟他最临近的k个邻居,把这个点跟所有邻居的距离都算一下,进行排序,找到最近的k个来取众数,以此来划分到最多的类别中。对于数据比较少的情况,计算速度比较快,如果要训练好一个数据模型,数据量必然是很大的,再去一个一个的计算预测数据与每个邻居之间的距离,计算量就会特别的大,可以使用KD树进行优化。

KNN 的计算过程是大量计算样本点之间的距离。为了减少计算距离次数,提升 KNN 的搜索效率,提出了 KD 树(K-Dimensional 的缩写)。KD 树是对数据点在 K 维空间中划分的一种数据结构。在 KD 树的构造中,每个节点都是 k 维数值点的二叉树。既然是二叉树,就可以采用二叉树的增删改查操作,这样就大大提升了搜索效率。

  • 例题1:有数据集{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},构造kd树。
    在这里插入图片描述
    六个数据点为二维的点,呈现在二维的坐标轴上,kd树的划分:
  • 1.以x1轴的中位数作为切分标准,2,4,5,7,8,9,把几个数从小到大排序,个数为偶数的话,选取中间的两个点,相加求中位数,(5+7)/2=6,
    • 1.(5,4)与(7,2)距离6同样近,取任意的一个点如取(7,2)作为根节点
    • 2.做一条过(7,2)点垂直于x1轴的线,把二维的屏幕划分为左右两部分
  • 2.以x2轴来划分左边区域,找到中位数,做x2的垂直线,
    • 1.左边区域有3个点,x2的值分别为3,4,7,中位数点为(5,4),
    • 2.过(5,4)做一条垂直于x2的线,把左边的区域分为上下两部分,
    • 3.以x1轴划分下区域,除了已成为节点的点,下区域就剩下了(2,3)点,通过(2,3)向x1做垂线,
    • 4.以x1轴划分上区域,除了已成为节点的点,上区域就剩下了(4,7)点,通过(4,7)向x1做垂线,
    • 5.在二叉树上放置的点是左小右大,所以把(2,3)点放在左侧,(4,7)点放在右侧
  • 3.以x2轴来划分右边区域,找到中位数,做x2的垂直线
    • 1.只剩下(8,1)与(9,6),所以中位数距离两个点的距离一致,随意取一个点作为节点,如取(9,6)
    • 2.过 (9,6)向x2轴做垂线,把右边区域也分为上下两部分,上部分已经没有点了
    • 3.下半部分找到(8,1)的中位数,只有一个点,这个点就是中位数,通过这个点向x1轴做垂线,得到的最后一个节点为(8,1)
      在这里插入图片描述
  • 例题2,有目标点(3,4.5),请问如何在数据集中搜索目标点的最近邻?
    在这里插入图片描述
    如果取计算每个点的距离,就要去计算6次,如果数据量很大的话,计算量就会越来越多。用kd树进行计算,本身就是个递归,重复的过程。
  • 1.从根节点(7,2)来判断,点(3,4.5)x1轴上的数为3,3小于7,左边为较小的数,就找到了点(5,4),x2维度上的数为4,4.5大于4,会往右侧方向找(较大的数),找到了点(4,7),此时暂时的最近邻为(4,7),
  • 2.以(3,4.5)为圆心,到点(4,7)的距离为半径画圆,得到了蓝色的圆,很显然(4,7)不是点(3,4.5)的最近邻,此时算法要进行回溯,以目标点为圆心,以到暂时的临近点为半径,做圆,两点间的半径为2.69
  • 3.回溯到上个节点(5,4),以目标点为圆心,以到暂时的临近点(5,4)为半径,做圆,两点间的半径为2.06
  • 4.继续进行回溯到(2,3),以目标点为圆心,以到暂时的临近点(2,3)为半径,做圆,两点间的半径为1.8,
    得到(2,3)才是最近邻的点,此时就不需要去计算距离(7,2),(9,6),(8,1)的距离了,减少了计算量。

数据集获取

要测试一些算法,如果不是在真实的环境中,缺少特征工程的数据,学这些模型的时候就可以借鉴已经做好处理的数据来进行学习。

获取函数

获取数据的接口

sklearn.datasets 加载获取流行数据集
datasets.load_***() 获取小规模数据集,数据包含在datasets里
datasets.fetch_***(data_home=None) 获取大规模数据集,需要从网络上下载,
函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/

在这里插入图片描述

返回集

load 和 fetch 返回的数据类型(字典格式)
data:特征数据数组
target:标签数组
DESCR:数据描述
feature_names:特征名
target_names:标签名

在这里插入图片描述

数据分割

训练模型需要一部分数据,评估模型的好坏需要一部分新的数据,两份数据重合的时候会产生状况,导致结果不真实,所以把数据分为训练集、测试集以及验证集,在没有调参之前把数据分为训练集和测试集。数据分割的方式:留出法,直接以二八或者三七分数据;K折交叉验证,把数据集分为10份,依次以1份作为测试集,其他的作为训练集,得出10次的结果求平均;自助法,训练集随机进行有放回的抽取。最常用的是留出法。

留出法api

用程序实现,把数据集分为3份和7份,用numpy、pandas的选择数据来做,求出数据的总长度,然后做切割,用sklearn来做训练集的测试分割。

sklearn.model_selection.train_test_split(arrays,*options)
x 数据集的特征值
y 数据集的标签值
test_size 测试集的大小,一般为float
random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
return 训练特征值,测试特征值,训练目标值,测试目标值

在这里插入图片描述
算法、模型都存在随机性,同一个算法、同一个数据集运行多次的时候结果是不一样的,同一个代码、同一个模型不同人训练出来的结果会有差异。数据分割同样也具有随机性,可以使用random_state参数,保证每次训练出来的结果是一样的。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OJ练习第142题——路径总和 II

113. 路径总和 II 力扣链接:113. 路径总和 II 题目描述 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 Java代码(深度优先搜…

基于linux下的高并发服务器开发(第三章)- 3.8 线程同步

sellticket.c /*使用多线程实现买票的案例。有3个窗口&#xff0c;一共是100张票。 */#include <stdio.h> #include <pthread.h> #include <unistd.h>// 全局变量&#xff0c;所有的线程都共享这一份资源。 int tickets 100;void * sellticket(void * arg)…

后处理材质球:黄金螺旋分割线和参考图

后处理材质球&#xff1a;黄金螺旋分割线和参考图 Begin Object Class/Script/UnrealEd.MaterialGraphNode Name"MaterialGraphNode_0"Begin Object Class/Script/Engine.MaterialExpressionLinearInterpolate Name"MaterialExpressionLinearInterpolate_1&qu…

(202307)wonderful-sql:初识数据库(task1)

学习知识 初识数据库 关系型数据库简介 特点是由行和列组成的二维表来管理数据&#xff0c;这种类型的 DBMS 称为关系数据库管理系统&#xff08;Relational Database Management System&#xff0c;RDBMS&#xff09;。本课程将向大家介绍使用 SQL 语言的数据库管理系统&am…

No5:学习过程中基础语法积累

文章目录 基础语法&#xff1a;对象对象构建和数据封装 集合列表截取输出&#xff08;特色是数据可变即可重新赋值&#xff09;元组截取输出&#xff08;元组特色是数据不可变&#xff09;字典&#xff08;根据key取value&#xff09; 字符串函数 基础语法&#xff1a;对象 对…

【动态规划part04】| 背包问题理论基础、416.分割等和子集

目录 &#x1f388;背包问题理论基础 &#x1f45c;01背包 ✨二维dp数组01背包 ✨一维dp数组01背包&#xff08;滚动数组&#xff09; &#x1f388;LeetCode416.分割等和子集 &#x1f388;背包问题理论基础 &#x1f45c;01背包 有n件物品和一个最多能背重量为w 的背…

AUTOSAR从入门到精通-【应用篇】基于 LIN 总线的汽车自动天窗防夹控制系统的设计与实现

目录 前言 天窗控制系统的 LIN 总线 2.1 LIN 总线概述 2.2 LIN 总线协议规范 2.3 防夹控制系统的 LIN 总线 2.4 系统 LIN 网络测试 天窗防夹控制系统整体设计方案 3.1 天窗防夹控制系统功能 3.2 控制系统总体设计 3.2.1 系统结构 3.2.2 天窗防夹控制器 3.2.3 天窗传…

小黑子—JavaWeb:第二章 Maven与MyBatis

JavaWeb入门2.0 1.Maven1.1 Maven 简介1.2 Maven 安装配置1.3 Maven 基本使用1.3.1 Maven常用命令1.3.2 Maven生命周期 1.4 IDEA 配置 Maven1.4.1 配置 Maven 环境1.4.2 Maven 坐标详情1.4.3 IDEA 创建Maven项目1.4.4 IDEA 导入Maven文件1.4.5 配置Maven-Helper 插件 1.5 依赖管…

逻辑斯特回归

*分类是离散的&#xff0c;回归是连续的 下载数据集 trainTrue&#xff1a;下载训练集 逻辑斯蒂函数保证输出值在0-1之间 能够把实数值映射到0-1之间 导函数类似正态分布 其他饱和函数sigmoid functions 循环神经网络经常使用tanh函数 与线性回归区别 塞戈马无参数&#x…

《嵌入式 - 工具》J-link读写MCU内部Flash

1 J-Link简介 J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR&#xff0c;ADS&#xff0c;KEIL&#xff0c;WINARM&#xff0c;RealView等集成开发环境支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A5/A8/A9等内核芯片的仿真&#xff0c;是学…

VirtualBox 7.0.10 使用宿主机物理硬盘

方法&#xff1a; 利用virtualbox的管理工具&#xff0c;将宿主机脱机后的物理硬盘&#xff0c;映射为一个vmdk&#xff0c;然后在vitrualbox中注册该vmdk&#xff0c;然后分配给虚拟机使用。 1. 右键单击window桌面左下角&#xff0c;选择 Windows PowerShell (管理员) 2. c…

第一章 函数的概念

文章目录 考点1、定义域2、对应法则 一、函数的概念1、自变量 x , 因变量 y&#xff0c;一一对应&#xff0c;因此有公式 y f (x)2、定义域具体函数的定义域 &#xff08;送分题&#xff09; 真题1、2、3、4、抽象函数的定义域 真题1、2、 3、根据函数的对应法则求函数表达式题…

会声会影VideoStudio2023中文旗舰版有哪些新功能及最低系统配置要求

会声会影VideoStudio2023中文旗舰版使用起来很有趣。它很容易使用&#xff0c;但仍然给你很多功能和力量。会声会影VideoStudio2023中文旗舰版让我与世界分享我的想法&#xff01;“这个产品的功能非常多&#xff0c;我几乎没有触及它的表面&#xff0c;我可以做大量的编辑、色…

js ==运算规则

let a {name: zhangsan,valueOf(){return 100;} }; let b 100; console.log(ab); //true let a {value: 1,valueOf: function() {return this.value;} };console.log(a 1 && a 2 && a 3); // 输出 true

macOS Sonoma 14 beta 3 (23A5286i) ISO、IPSW、PKG 下载,公共测试版现已推出

macOS Sonoma 14 beta 3 (23A5286i) ISO、IPSW、PKG 下载&#xff0c;公共测试版现已推出 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装…

树莓派安装ROS

ROS&#xff0c;树莓派如何快速部署ROS 版本查看 检查Raspbian版本的最简单方法是利用终端。 在开始之前&#xff0c;请确保已经开启了一个终端会话。 在Raspbian中使用一个简单的命令来获取当前版本。 要查看当前安装的Raspbian版本信息&#xff0c;需要做的就是执行下面的…

RT1052的介绍及MDK

文章目录 RT1052 核心板的资源型号为&#xff1a;RT1052CVL5B。GPIO端口原理LDOEEPROM 复位电路启动模式设置电路BootLoader地址 开发环境搭建新建 基于 FSL 库的 MDK5 工程软件下载SDK包SDK包内容boards 文件夹CMSIS 文件夹devices 文件夹middleware 文件夹&#xff1a; 新建工…

解决Git拉取代码仓库时显示文件名太长无法创建的问题解决

问题描述 拉取鸿蒙仓库应用示例代码时&#xff0c;鸿蒙应用示例代码&#xff0c;发现能下载成功&#xff0c;但是会报一个错误&#xff0c;错误截图和信息如下所示&#xff1a; 报错信息&#xff1a; try/src/main/ets/pages/pagelevelstagemanagement/multicompomentssync/ …

Redis的9种数据类型与数据持久化

系列文章传送门&#xff1a; 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 【七天入门数据库】第四天 数据操作语言DML 一、Redis的9种数据类型的基本操作 &#xff08;一&#xff09;k…

服务器中了360后缀勒索病毒,360后缀勒索病毒介绍解密数据恢复

360后缀勒索病毒&#xff0c;是BeijingCrypt勒索家族中的一种勒索软件病毒&#xff0c;这种恶意软件一旦攻击了企业的服务器就会利用自身独特的加密技术来全盘扫描系统文件&#xff0c;并对用户的全部文件进行加密&#xff0c;并要求用户支付赎金以解锁文件。近期&#xff0c;我…