当前位置: 首页 > news >正文

建设银行官方网站购房贷款利率wordpress谷歌网站地图

建设银行官方网站购房贷款利率,wordpress谷歌网站地图,深圳软件定制,企业快速建站必备的几大常识借鉴#xff1a;关于K近邻#xff08;KNN#xff09;#xff0c;看这一篇就够了#xff01;算法原理#xff0c;kd树#xff0c;球树#xff0c;KNN解决样本不平衡#xff0c;剪辑法#xff0c;压缩近邻法 - 知乎 但是不要看他里面的代码#xff0c;因为作者把代码…借鉴关于K近邻KNN看这一篇就够了算法原理kd树球树KNN解决样本不平衡剪辑法压缩近邻法 - 知乎 但是不要看他里面的代码因为作者把代码里的一些符号故意颠倒了 比如“”改成“!”还有乱加“~”看明白逻辑才能给他改过来 一、剪辑法 当训练集数据中存在一部分不同类别数据的重叠时在一部分程度上说明这部分数据的类别比较模糊这部分数据会对模型造成一定的过拟合那么一个简单的想法就是将这部分数据直接剔除掉即可也就是剪辑法。 剪辑法将训练集 D 随机分成两个部分一部分作为新的训练集 Dtrain一部分作为测试集 Dtest然后基于 Dtrain使用 KNN 的方法对 Dtest 进行分类并将其中分类错误的样本从整体训练集 D 中剔除掉得到 Dnew。 由于对训练集 D 的划分是随机划分难以保证数据重叠部分的样本在第一次剪辑时就被剔除因此在得到 Dnew 后可以对 Dnew 继续进行上述操作数次这样可以得到一个比较清爽的类别分界。 效果如下图 附上可直接运行的代码 from sklearn import datasets import matplotlib.pyplot as pyplot from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier as KNN import numpy as np from collections import Counter from numpy import where# make_classification用于手动构造数据 # 1000个样本分成4类 X, y datasets.make_classification(n_samples1000, n_features2,n_informative2, n_redundant0, n_repeated0,n_classes4, n_clusters_per_class1)# # # 画出二维散点图 # for label, _ in counter.items(): # row_ix where(y label)[0] # pyplot.scatter(X[row_ix, 0], X[row_ix, 1], labelstr(label)) # pyplot.legend() # pyplot.show()# 剪辑10次 for i in range(10):x_train, x_test, y_train, y_test train_test_split(X, y, test_size0.5)k 5KNN_clf KNN(n_neighborsk)KNN_clf.fit(x_train, y_train) # 用训练集训练KNNy_predict KNN_clf.predict(x_test) # 用测试集测试cond y_predict y_testx_test x_test[cond] # 把预测错误的从整体数据集中剔除掉y_test y_test[cond] # 把预测错误的从整体数据集中剔除掉X np.vstack([x_train, x_test]) # 为下一次循环做准备剔除掉本轮预测错误的y np.hstack([y_train, y_test]) # 为下一次循环做准备剔除掉本轮预测错误的# summarize the new class distribution counter Counter(y) print(counter)# 画出二维散点图 for label, _ in counter.items():row_ix where(y label)[0]pyplot.scatter(X[row_ix, 0], X[row_ix, 1], labelstr(label)) pyplot.legend() pyplot.show() 以上使用了k20的参数进行剪辑的结果循环了10次一般而言k越大被抛弃的样本会越多因为被分类的错误的概率更大。 二、CNN压缩近邻法欠采样 压缩近邻法的想法是认为同一类型的样本大量集中在类簇的中心而这些集中在中心的样本对分类没有起到太大的作用因此可以舍弃掉这些样本。 其做法是将训练集随机分为两个部分第一个部分为 store占所有样本的 10% 左右第二个部分为 grabbag占所有样本的 90% 左右然后将 store 作为训练集训练 KNN 模型grabbag 作为测试集将分类错误的样本从 grabbag 中移动到 store 里然后继续用增加了样本的 store 和减少了样本的 grabbag 再次训练和测试 KNN 模型直到 grabbag 中所有样本被分类正确或者 grabbag 中样本数为0。 在压缩结束之后store 中存储的是初始化时随机选择的 10% 左右的样本以及在之后每一次循环中被分类错误的样本这些被分类错误的样本集中在类簇的边缘认为是对分类作用较大的样本。 CNN欠采样已经有相应的Python实现库了相应的方法是CondensedNearestNeighbour下面是可直接运行的代码。 # Undersample and plot imbalanced dataset with the Condensed Nearest Neighbor Rule from collections import Counter from sklearn.datasets import make_classification from imblearn.under_sampling import CondensedNearestNeighbour from matplotlib import pyplot from numpy import where# make_classification方法用于生成分类任务的人造数据集 # X是数据几维都可以n_features4表示4维 # y用0/1表示类别weights调整0和1的占比 X, y make_classification(n_samples500, n_classes2, n_features3, n_redundant0,# n_clusters_per_class表示每个类别多少簇 # flip_y噪声增加分类难度n_clusters_per_class2, weights[0.5], flip_y0, random_state1)# summarize class distribution counter Counter(y) # {0: 990, 1: 10} counter是一个字典value存储类别key存储类别个数 print(counter)# CNN有直接可以调用的包 n_neighbors设置k值,k值越小越省时间,就设置为1吧 undersample CondensedNearestNeighbour(n_neighbors1) # transform the dataset X, y undersample.fit_resample(X, y)# summarize the new class distribution counter Counter(y) print(counter)# scatter plot of examples by class label for label, _ in counter.items():row_ix where(y label)[0]pyplot.scatter(X[row_ix, 0], X[row_ix, 1], labelstr(label)) pyplot.legend() pyplot.show() 但是我觉得这个CondensedNearestNeighbour()方法的可操作性太低所以没用这个方法而是根据CNN的原理CNN底层是训练KNN去写的 from sklearn import datasets import matplotlib.pyplot as pyplot from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier as KNN import numpy as np from collections import Counter from numpy import where# make_classification用于手动构造数据 # 1000个样本分成4类 X, y datasets.make_classification(n_samples1000, n_features2,n_informative2, n_redundant0, n_repeated0,n_classes4, n_clusters_per_class1, random_state1) counter Counter(y) # 画出二维散点图 for label, _ in counter.items():row_ix where(y label)[0]pyplot.scatter(X[row_ix, 0], X[row_ix, 1], labelstr(label)) pyplot.legend() pyplot.show()# 10%作为训练集90%作为测试集 x_train, x_test, y_train, y_test train_test_split(X, y, test_size0.9)while True:k 1KNN_clf KNN(n_neighborsk)KNN_clf.fit(x_train, y_train)y_predict KNN_clf.predict(x_test)cond y_predict y_test # cond记录分类的对与错分类错是False正确是True# 都分类正确退出if cond.all():print(所有测试集都分类正确CNN正常结束)breakx_train np.vstack([x_train, x_test[~cond]]) # 把分类错误(cond的值是False的移动到训练集里y_train np.hstack([y_train, y_test[~cond]])x_test x_test[cond] # 把分类对的继续作为下一轮的测试集y_test y_test[cond]if len(x_test) 0:print(所有样本都能做到分类错误也就是结果集原始数据集一般不会出现这种情况)break# summarize the new class distribution counter Counter(y_train) print(counter)# 画出二维散点图 for label, _ in counter.items():row_ix where(y_train label)[0]pyplot.scatter(x_train[row_ix, 0], x_train[row_ix, 1], labelstr(label)) pyplot.legend() pyplot.show() 2.1 改进版——指定压缩后样本大小的CNN 在如下代码中用sampleNum指定全体样本数量用endNum指定压缩后样本数量 from sklearn import datasets import matplotlib.pyplot as pyplot from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier as KNN import numpy as np from collections import Counter from numpy import wheresampleNum 1000 endNum 500 k 1 # KNN算法的K值 # make_classification用于手动构造数据 # 1000个样本分成4类 X, y datasets.make_classification(n_samplessampleNum, n_features2,n_informative2, n_redundant0, n_repeated0,n_classes4, n_clusters_per_class1, random_state1) # counter Counter(y) # # 画出二维散点图 # for label, _ in counter.items(): # row_ix where(y label)[0] # pyplot.scatter(X[row_ix, 0], X[row_ix, 1], labelstr(label)) # pyplot.legend() # pyplot.show()# 10%作为训练集90%作为测试集 x_train, x_test, y_train, y_test train_test_split(X, y, test_size0.9) # print(x_train.shape[0]) # 100nowNum x_train.shape[0] # 用来控制 训练集/筛选后的样本数 满足resultNum就停下, 初始有x_train这么多个while True:KNN_clf KNN(n_neighborsk)KNN_clf.fit(x_train, y_train)y_predict KNN_clf.predict(x_test)cond y_predict y_test # cond记录分类的对与错分类错是False正确是True# 都分类正确退出if cond.all():print(所有测试集都分类正确CNN自动结束但是结果集没凑够呢)break# 如果结果集数量不够要求的endNum继续下一轮if nowNumy_test[~cond].shape[0] endNum:nowNum nowNumy_test[~cond].shape[0]print(目前结果集数量, nowNum)x_train np.vstack([x_train, x_test[~cond]]) # 把分类错误(cond的值是False的移动到训练集里y_train np.hstack([y_train, y_test[~cond]])x_test x_test[cond] # 把分类对的继续作为下一轮的测试集y_test y_test[cond]# 如果结果集数量超过endNum我们只要测试集里分类错误的前endNum-nowNum个else:# 记录前endNum-nowNum个的位置(截取位置condCut 0 # 记录截取位置for i in range(cond.shape[0]):if not cond[i]:nowNum nowNum 1if nowNum endNum:condCut i # 在cond[condCut]处刚好是我们要的第endNum个结果集样本break# 把cond[condCut]后面的都设置成Truecond[condCut1:] Truex_train np.vstack([x_train, x_test[~cond]]) # 把分类错误(cond的值是False的移动到训练集里y_train np.hstack([y_train, y_test[~cond]])print(结果集的数量为, x_train.shape[0], 满足endNum, endNum)breakif len(x_test) 0:print(所有样本都能做到分类错误也就是结果集原始数据集一般不会出现这种情况)break# summarize the new class distribution counter Counter(y_train) print(counter)# 画出二维散点图 for label, _ in counter.items():row_ix where(y_train label)[0]pyplot.scatter(x_train[row_ix, 0], x_train[row_ix, 1], labelstr(label)) pyplot.legend() pyplot.show()
http://www.hkea.cn/news/14394343/

相关文章:

  • 企业网站案例公司手机网站被做跳转
  • 网站开发设置用户小型logo设计
  • 好品质自适应网站建设外贸 国外推广网站
  • 千图网解析网站怎么做wordpress微信机器人高级版
  • 惠州模板做网站网站链接是什么
  • 维港豪宅项目网站建设h5 网站建设
  • 国内最好的网站建设公司网站页面术语
  • 网站开发和浏览器兼容问题网站外的seo
  • 公司做网站要企业认证网络科技公司取名
  • 做响应式网站价格wordpress悬浮工具
  • 苏州网站推广找苏州梦易行旅游网页图片
  • c s网站开发模式做网站 写文章怎样加视频
  • 网站制作要用哪些软件营销技巧五步推销法
  • 招商加盟网站模板html设计交流网站
  • aso.net 网站开发淘宝网网页版官网
  • 东阳哪里可以做网站免费推广的方式有哪些
  • 顺企网浙江网站建设百度推广排名代发
  • 虎丘苏州网站建设做网站的软件项目进度计划
  • 做网站选哪家好高端网站建设与发展
  • 合肥肥东网站建设太阳能建设网站
  • 公司网站优化软件办公室装修设计平台
  • 防止网站被克隆深圳百度seo代理
  • 网站建设php的心得和体会交易网站开发合同范本
  • 仿韩国网站源码seo页面优化公司
  • 如何查询网站被百度收录情况网站建设 APP
  • 网站 被降权网站编写费用
  • 网站加入地图股市财经新闻最新消息
  • 北京欢迎你网站建设织梦怎么做门户网站
  • 个人网站简单福州百度快速优化
  • 泸州网站建设多少钱网页制作基础教程第二版cc6照片