机器学习实战笔记34-38:gridsearchcv的进阶使用,无监督学习:kmeans、DBSCAN
主要讲了gridsearchcv的几种变形使用方式
一:全部参数搜索
方法是构造机器学习流之后,构造参数空间
二:优化评估指标的选择
作为网格搜索中输出评估指标的参数,roc_auc参数只能指代metrics_roc_auc_score函数的二分类功能,如果需要多分类,则需要将scoring修改为roc_auc_ovr等参数
三:make_scorer函数,需要同时输入评估器、特征矩阵及真实标签,让特征矩阵经过评估器运算后和真实标签比对得到分数
acc=make_scorer(accuracy_score)
Acc(search.best_estimator_,x_train,y_train)
四:同时输入多组评估指标
五:一个注意点:
对于best_score_属性查看的是在roc-auc评估指标下,默认五折交叉验证时验证集上的结果,但如果对评估器用.score方法,查看的是pipe评估器默认的结果评估方式,也就是准确率
六:最终结果:
结果比手动调参准确率低,但没有过拟合隐患
36-38无监督学习:kmeans、DBSCAN
一.kmeans的参数:
存在的两个问题:震荡收敛,算法会在两种不同划分方式间来回;局部最优姐。
解决方法:init选择Kmeans++,用更合理的方式选择初始值点:
前五个参数重要,最后一个是优化计算距离的时间的
Kmeans也可以预测新数据的类别,方法:km.predict()
评估聚几类好的参数:不能用SSE,因为K增加它一定会逐渐下降。应该用轮廓系数:(到其它簇的距离-到自己簇的距离)/两者较大值
from sklearn.metrics import silhouette_score
特别注意点:聚类的性能远远弱于有监督学习算法
- mini-batch kmeans 与DBSCAN密度聚类
前者是牺牲部分精度换取速度(注意,不需要靠它离开局部最小值陷阱,有kmeans++)
参数表:
后者是解决:kmeans是解决圆形、球形边界,如果不是圆形则用DBSCAN(注:plt
.scatter绘制散点图,plt.plot绘制折线图)
原理:设置eps和min_samples,在eps内能有min_samples个点的称为核心点,范围内的为临界点,其余为噪声点.把以核心点范围内的簇连成一片,其余噪声点舍弃。具体代码如下:
# In[1]:
from sklearn.cluster import KMeans
# In[3]:
get_ipython().run_line_magic('pinfo', 'KMeans')
# In[4]:
from sklearn.metrics import silhouette_score
# In[5]:
from sklearn.datasets import make_moons
# In[6]:
x,y=make_moons(200,noise=0.05,random_state=24)
# In[12]:
import matplotlib.pyplot as plt
# In[13]:
plt.scatter(x[:,0],x[:,1],c=y)
# In[16]:
km=KMeans(n_clusters=2)
# In[17]:
km.fit(x)
# In[21]:
plt.scatter(x[:,0],x[:,1],c=km.labels_)
plt.plot(km.cluster_centers_[:,0],km.cluster_centers_[:,1],'ro')
# In[22]:
from sklearn.cluster import DBSCAN
# In[23]:
DB=DBSCAN(eps=0.3,min_samples=10)
# In[24]:
DB.fit(x)
# In[25]:
plt.scatter(x[:,0],x[:,1],c=DB.labels_)