PCA

PCA主要是用来数据降维,将高纬度的特征映射到低维度,具体可学习线性代数。

这里,我们使用sklearn中的PCA.

from sklearn.decomposition import PCA

X = np.array([[-1, -1, 1, -3], [-2, -1, 1, -3], [-3, -2, 1, -3], [1, 1, 1, -3], [2, 1, 1, -3], [3, 2, -1, -3]])
pca = PCA(n_components=4)
pca.fit(X)
print(pca.explained_variance_ratio_) #各成分百分比
print(pca.explained_variance_) #各成分值 pca = PCA(n_components=1) #原来是4维,现在降至1维
XX = pca.fit_transform(X)
print(XX)

结果:

[0.94789175 0.04522847 0.00687978 0.        ]
[8.21506183 0.39198011 0.05962472 0. ]
[[-1.42149543]
[-2.2448796 ]
[-3.60382274]
[ 1.29639085]
[ 2.11977502]
[ 3.85403189]]

其实,直接看数据也能发现。例如,最后一维没变化所以百分比为0,倒数第二维只有一点点变化所以百分比也很小,它们对结果的影响很小,在降维时可以去掉。

KNN

所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。
kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。
流程如下:
  1. 计算出样本数据和待分类数据的距离;
  2. 为待分类数据选择K个与其距离最小的样本;
  3. 统计出K个样本中大多数样本所属的分类;
  4. 这个分类就是待分类数据所属的分类。
classifier = KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=1, n_neighbors=10, p=2,
weights='uniform')

超参数需要自己尝试。

其他

from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn import metrics classifier = LogisticRegression(random_state = 0) #0.78
#classifier = KNeighborsClassifier(algorithm='kd_tree',n_neighbors = 5, metric = 'minkowski', p = 2, weights='uniform') #0.839
#classifier = SVC(kernel = 'linear', random_state = 0) #0.81
#classifier = SVC(kernel = 'rbf', random_state = 0) #0.77
#classifier = GaussianNB() #0.77
#classifier = DecisionTreeClassifier(criterion = 'entropy', random_state = 0) #0.64
#classifier = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0) #0.83
classifier.fit(X_stard, Y_stard)
YY_pred = classifier.predict(X_pred)
result_NMI=metrics.normalized_mutual_info_score(YY_pred, Y_pred)
print("result_NMI:",result_NMI) #3,1,minkowski 3,1,manhattan

GridSearchCV寻找超参数

sklearn调参有一个工具gridsearchcv,它存在的意义就是自动调参,只要把参数输进去,就可以对算法进行相应的调优,找到合适的参数。

### KNN
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV clf = KNeighborsClassifier()
n_neighbors = list(range(1,10))
weights = ['uniform','distance']
algorithm_options = ['auto','ball_tree','kd_tree','brute']
leaf_range = list(range(1,10))
p = list(range(1,10))
param_grid = [{'n_neighbors': n_neighbors, 'weights': weights, 'algorithm': algorithm_options, 'leaf_size': leaf_range, 'p':p}]
grid_search = GridSearchCV(clf, param_grid=param_grid, cv=10)
grid_search.fit(X_pred, Y_pred)
grid_search.best_score_, grid_search.best_estimator_, grid_search.best_params_

结果:

(0.9675572519083969,
KNeighborsClassifier(algorithm='auto', leaf_size=1, metric='minkowski',
metric_params=None, n_jobs=None, n_neighbors=7, p=2,
weights='uniform'),
{'algorithm': 'auto',
'leaf_size': 1,
'n_neighbors': 7,
'p': 2,
'weights': 'uniform'})

参考链接:

1. https://blog.csdn.net/puredreammer/article/details/52255025

2. https://www.makcyun.top/2019/06/15/Machine_learning08.html

3. https://blog.csdn.net/szj_huhu/article/details/74909773

4. https://www.zybuluo.com/spiritnotes/note/295894

PAC、KNN和GridSearchCV的更多相关文章

  1. 室内定位系列(三)——位置指纹法的实现(KNN)

    位置指纹法中最常用的算法是k最近邻(kNN):选取与当前RSS最邻近的k个指纹的位置估计当前位置,简单直观有效.本文介绍kNN用于定位的基本原理与具体实现(matlab.python). 基本原理 位 ...

  2. 使用PCA + KNN对MNIST数据集进行手写数字识别

    首先引入需要的包 %matplotlib inline import numpy as np import scipy as sp import pandas as pd import matplot ...

  3. KNN算法的实现

    K近邻(KNN)算法简介 KNN是通过测量不同特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其 ...

  4. 美团店铺评价语言处理以及分类(tfidf,SVM,决策树,随机森林,Knn,ensemble)

    第一篇 数据清洗与分析部分 第二篇 可视化部分, 第三篇 朴素贝叶斯文本分类 支持向量机分类 支持向量机 网格搜索 临近法 决策树 随机森林 bagging方法 import pandas as pd ...

  5. k近邻算法(KNN)

    k近邻算法(KNN) 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. from sklearn.model_selection ...

  6. 吴裕雄 数据挖掘与分析案例实战(10)——KNN模型的应用

    # 导入第三方包import pandas as pd # 导入数据Knowledge = pd.read_excel(r'F:\\python_Data_analysis_and_mining\\1 ...

  7. 如何利用AI识别未知——加入未知类(不太靠谱),检测待识别数据和已知样本数据的匹配程度(例如使用CNN降维,再用knn类似距离来实现),将问题转化为特征搜索问题而非决策问题,使用HTM算法(记忆+模式匹配预测就是智能),GAN异常检测,RBF

    https://www.researchgate.net/post/How_to_determine_unknown_class_using_neural_network 里面有讨论,说是用rbf神经 ...

  8. GridSearchCV和RandomizedSearchCV调参

    1 GridSearchCV实际上可以看做是for循环输入一组参数后再比较哪种情况下最优. 使用GirdSearchCV模板 # Use scikit-learn to grid search the ...

  9. 机器学习 第5篇:knn回归

    基于最邻近算法的分类,本质上是对离散的数据标签进行预测,实际上,最邻近算法也可以用于对连续的数据标签进行预测,这种方法叫做基于最邻近数据的回归,预测的值(即数据的标签)是连续值,通过计算数据点最临近数 ...

随机推荐

  1. AtCoder Grand Contest 038 简要题解

    从这里开始 比赛目录 Problem A 01 Matrix Code #include <bits/stdc++.h> using namespace std; typedef bool ...

  2. Java后端传Long类型给前端导致的精度丢失

    问题:实体属性是Long类型,在后端值本来是1119102511023023410,但是返回给前端的却是1119102511023023400 解决方案:添加序列化注解 import com.fast ...

  3. Win10 1903 运行安卓模拟器蓝屏解决方案

    由于没有安卓机,想要测试一些东西,所以选择了安卓模拟器,可是一运行模拟器就导致电脑蓝屏,试了 N 次都不行. 于是在网上寻找解决方案,了解到导致蓝屏的原因都是因为虚拟化技术,我的系统是 Windows ...

  4. SpringBoot 第一篇:入门篇

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10819728.html 版权声明:本文为博主原创文章,转载请附上博文链接! 前言   博主从去年 ...

  5. C# 1.0 新特性之异步委托(AP、APM)

    Ø  前言 C# 异步委托也是属于异步编程中的一种,可以称为 Asynchronous Programming(异步编程)或者 Asynchronous Programming Model(异步编程模 ...

  6. Appium+python自动化(一)- 环境搭建—上(超详解)

    简介 今天是高考各地由于降水,特别糟糕,各位考生高考加油,全国人民端午节快乐.最近整理了一下自动化的东西,先前整理的python接口自动化已经接近尾声.即将要开启新的征程和篇章(Appium& ...

  7. maven打包产生可执行jar包

    http://blog.csdn.net/u014695188/article/details/53128095 https://blog.csdn.net/fuck487/article/detai ...

  8. Redis-1-简介与安装

    目录 1.Redis 简介 2.安装Redis 1.安装gcc redis是c语言编写的 2.下载redis安装包,在root目录下执行 3.解压redis安装包 4.进入redis目录 5.编译安装 ...

  9. 配置ssl使用了不受支持的协议。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    使用了不受支持的协议. ERR_SSL_VERSION_OR_CIPHER_MISMATCH 协议不受支持 客户端和服务器不支持一般 SSL 协议版本或加密套件.   类似的这种提示   免费版百度云 ...

  10. 一道Common Lisp 宏的练习题

    这是<ANSI Common Lisp>第10章“宏”的习题第6题: 定义一个宏,接受一变量列表以及一个代码主体,并确保变量在代码主体被求值后恢复 (revert)到原本的数值