Python 机器学习日记

Python 机器学习日记,第1张

纯0基础,只是想提升自己,啥也不会,只会抄。知识很浅薄,学到的一点一点往里添加,不懂就查,懂了自己写。看完了Python从入门到精通、流畅的Python,但是基本都是比着书敲代码,不会用。想换一种学习方式,现在用的书是舍友推荐的《深入浅出Pyrhon学习》,代码都是出自本书。不知道怎么学,刚考上研究生发现舍友什么都会,哥们儿只会做题,也没见到导师,社恐在线好吧。写这玩意儿也是看到舍友写了,不知道对我有没有用。

P.S.我不太懂这个原创转载啥的,我是通过在网上搜进行不懂的学习,有人看到的话要是我侵权啥的感谢告诉我我立马删了然后去跟原博主道歉(就是当自己的一个笔记..),学生一个真不懂。

2021.9.15

K最邻近算法

KNN分类器

KNN学习(K-Nearest Neighbor algorithm,K最邻近方法 )是一种统计分类器,对数据的特征变量的筛选尤其有效。KNN的基本思想是:输入没有标签(标注数据的类别),即没有经过分类的新数据,首先提取新数据的特征并与測试集中的每一个数据特征进行比較;然后从測试集中提取K个最邻近(最类似)的数据特征标签,统计这K个最邻近数据中出现次数最多的分类,将其作为新的数据类别。

from sklearn.datasets import make_blobs
#导入KNN分类器
from sklearn.neighbors import KNeighborsClassifier
#导入画图工具
import matplotlib.pyplot as plt
#导入数据集拆分工具
from sklearn.model_selection import train_test_split
#生成样本为200,分类为2的数据集
data = make_blobs(n_samples=200,centers=2,random_state=8)
X,y = data
#将生成的数据集进行可视化
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolors='k')

 make_blobs函数

函数功能:在机器学习中自建模型

函数参数:data = make_blobs(n_samples=200,centers=2,random_state=8)

n_samples:int或数组

如果为int,则为在簇之间平均分配的点总数。 如果是数组,则序列中的每个元素表示每个簇的样本数。

centers:int或形状数组[n_centers,n_features]

可选(默认= None)要生成的中心数或固定的中心位置。 如果n_samples是一个int且center为None,则将生成3个中心。 如果n_samples是数组类,则中心必须为None或长度等于n_samples长度的数组。

random_state:int,RandomState实例或无(默认)
确定用于创建数据集的随机数生成。 为多个函数调用传递可重复输出的int值。

原文出处:sklearn.datasets中的make_blobs函数解析_The Zen of Data Analysis-CSDN博客_make_blobs函数

用matplotlib将数据用图形表示出来

 这种生成的数据集被称为训练集,是已知的数据。

scatter函数用来生成一个scatter散点图

plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolors='k')

X[:,0],X[:,1]是参数x,y 用来规定shape的大小,也就是点的大小

c = y:c代表点的颜色,y代表黄色

camp:标量或者colormap的名字;.cm是matplotlib中的色彩映射函数,spring类似于紫色。

edgecolors = 'k' 边缘线的颜色为黑色

颜色:b=blue,k=black,y=yellow...

#下面的代码用于画图
import numpy as np
clf = KNeighborsClassifier()
clf.fit(X,y)
x_min,x_max = X[:,0].min() - 1,X[:,0].max()+1
y_min,y_max = X[:,1].min() - 1,X[:,1].max()+1
xx,yy = np.meshgrid(np.arange(x_min,x_max,.02),
                    np.arange(y_min,y_max,.02))
Z = clf.predict(np.c_[xx.ravel(),yy.ravel()])
Z = Z.reshape(xx.shape)
plt.pcolormesh(xx,yy,Z,cmap=plt.cm.Spectral)
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolors='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifier:KNN")

plt.show()

比着书敲还是在出错,整理了一下出现的报错: 

too many values to unpack (expected 2)

只有一个返回值但是在()内出现了两个返回值,这个是我打错了,将.02放在了()外,当然这些代码我看不懂,下面每一句每一句的去查一下。

reshape() takes exactly 1 argument (0 given)

reshape函数必须要有一个返回值,我没打

module 'matplotlib.cm' has no attribute 'Pastell'

这个应该是.cm文件中没有‘Pastell’这个东西,我按照书上打的.spring也没有,但是那个就有颜色,这个就不行,咱也不知道为啥,换了个其他颜色就OK了

slice indices must be integers or None or have an __index__ method

数据格式错误,我把,打成了.

下面是处理代码中不懂得函数以及语句,先歇十分钟。

生成的图是这样:

 在sklearn库中,KNeighborsClassifier是实现K近邻算法的一个类

clf = KNeighborsClassifier()

类的结构如下:

KNeighborsClassifier(n_neighbors=5,weights=’uniform’,algorithm=’auto’,leaf_size=30,p=2,metric=’minkowski’,metric_params=None,n_jobs=1,**kwargs)

(后边用到再学叭,说实话没看懂),现在理解的是创建了一个类用来实现这个算法,但是不明白里边为什么没有参数。是都是默认的参数值吗?


后边看到了,还真是都是默认的..

n_neighbors: int, 可选参数(默认为 5)用于kneighbors查询的默认邻居的数量

weights(权重): str or callable(自定义类型), 可选参数(默认为 ‘uniform’)

用于预测的权重函数。可选参数如下:

‘uniform’ : 统一的权重. 在每一个邻居区域里的点的权重都是一样的。
‘distance’ : 权重点等于他们距离的倒数。使用此函数,更近的邻居对于所预测的点的影响更大。
[callable] : 一个用户自定义的方法,此方法接收一个距离的数组,然后返回一个相同形状并且包含权重的数组。
algorithm(算法): {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, 可选参数(默认为 ‘auto’)

计算最近邻居用的算法:

‘ball_tree’ 是为了克服kd树高纬失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。
‘kd_tree’ 构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。
‘brute’ 使用暴力搜索.也就是线性扫描,当训练集很大时,计算非常耗时
‘auto’ 会基于传入fit方法的内容,选择最合适的算法。
leaf_size(叶子数量): int, 可选参数(默认为 30)

传入BallTree或者KDTree算法的叶子数量。此参数会影响构建、查询BallTree或者KDTree的速度,以及存储BallTree或者KDTree所需要的内存大小。 此可选参数根据是否是问题所需选择性使用。

p: integer, 可选参数(默认为 2)

用于Minkowski metric(闵可夫斯基空间)的超参数。p = 1, 相当于使用曼哈顿距离 (l1),p = 2, 相当于使用欧几里得距离(l2) 对于任何 p ,使用的是闵可夫斯基空间(l_p)

metric(矩阵): string or callable, 默认为 ‘minkowski’

用于树的距离矩阵。默认为闵可夫斯基空间,如果和p=2一块使用相当于使用标准欧几里得矩阵. 所有可用的矩阵列表请查询 DistanceMetric 的文档。

metric_params(矩阵参数): dict, 可选参数(默认为 None)

给矩阵方法使用的其他的关键词参数。

n_jobs: int, 可选参数(默认为 1)

用于搜索邻居的,可并行运行的任务数量。如果为-1, 任务数量设置为CPU核的数量。不会影响fit方法。
原文链接:https://blog.csdn.net/qq_34446614/article/details/117401217(参数代表了什么还没看,先去上课,回来再学)


回来了,接着学

clf.fit(X,y)

用训练器数据拟合分类器模型

参数意义:fit(X)表示用数据X来训练某种模型

fit(X,y=None)表示无监督学习算法

fit(x,y)表示监督学习算法

X[:,0]也知道了,是Python中,numpy对二维数组的一种写法,取该二维数组第一维中的所有数据,第二维中取第0个数据。

.min()什么意思不知道,也没查到,等着问问别人

百度上说是返回字符串中的最小的字母,但是我不知道他返回最小字母有啥用,兄弟们有看到的可以告诉我,让哥们儿进步一下子

np.meshgrid()根据传入的两个一维数组参数生成两个数组元素的列表

生成网格点坐标矩阵,每个交叉点都是网格点,描述这些网格点的坐标的矩阵,就是坐标矩阵。

放个大佬链接,不会了就去找找numpy.meshgrid()理解_lllxxq141592654的博客-CSDN博客

但是这个没讲参数也没看见np.arange

np.arange

np.arange([start=None], stop=None, [step=None], dtype=None)

生成一个[start,stop),以step为步长的序列,返回ndarray对象

其中start默认为0,stop必须填,step默认为1,dtype输出array数据类型,由指定参数决定

如果前三个任意一个为浮点型,那么生成的都是一个浮点型序列。(吃饭去,再学得晚上了)


clf.predict

用已经训练好的分类器去预测某个数据的标签

np.c_[数组1,数组2]将返回的间隔数值点配对

xx.ravel()将xx变成一维数组

Z.reshape()

是数组array()里面的方法,作用是将数据重新组织

xx.shape()

查看数据有多少行多少列

不装了,放链接Python中的shape和reshape()_醉糊涂仙的博客-CSDN博客_reshape

reshape新生成数组和原数组公用一个内存,不管改变哪个都会互相影响。

(上课上课) 


完了,刚躺平被cue了,让参加比赛,啥都不会咋办啊

plt.ylim(xx.min(),yy.min())

设置x轴y轴的数值显示范围,参数分别为最大值和最小值。


把新的数据点用五星表示出来

plt.scatter(6.75,4.82,marker='*',c='red',s=200)

将新的点归于了紫色区域

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/870553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存