在二维平面上,分别定义中心点(均值)和离散程度(方差)不同,且符合正态分布的两个集合(5000个离散点),利用K-近邻算法进行分类。
2条回答 默认 最新
关注 设两个集合的中心点分别为p0和p1表示二元组,方差分别为v0和v1(开方得到标准差),借助于numpy的随机化抽样子模块random很容易得到两个集合,合并为一个样本集。与之对应的标签集也不难制作。之后按10%的比例抽取测试集,其余作为训练集(事实上,k-近邻分类无需训练,训练集仅作为经验数据)。演示代码如下。
>>> import numpy as np >>> from sklearn.neighbors import KNeighborsClassifier # 导入K-近邻分类器 >>> from sklearn.model_selection import train_test_split as tsplit >>> p0, p1 = (-1,-1), (1,1) >>> v0, v1 = 0.8, 1.2 >>> xs_0 = np.random.normal(loc=p0[0], scale=pow(v0,0.5), size=5000) >>> ys_0 = np.random.normal(loc=p0[1], scale=pow(v0,0.5), size=5000) >>> label_0 = np.zeros(5000, dtype=np.int32) >>> xs_1 = np.random.normal(loc=p1[0], scale=pow(v1,0.5), size=5000) >>> ys_1 = np.random.normal(loc=p1[1], scale=pow(v1,0.5), size=5000) >>> label_1 = np.ones(5000, dtype=np.int32) >>> X = np.vstack((np.stack((xs_0, ys_0), axis=1), np.stack((xs_1, ys_1), axis=1))) >>> y = np.hstack((label_0, label_0)) >>> X.shape, y.shape ((10000, 2), (10000,)) >>> X_train, X_test, y_train, y_test = tsplit(X, y, test_size=0.1) # 拆分 >>> m = KNeighborsClassifier() # 实例化模型。n_neighbors参数指定k值,默认k=5 >>> m.fit(X_train, y_train) # 模型训练 KNeighborsClassifier() >>> score = m.score(X_test, y_test) # 模型测试精度(介于0~1之间) >>> score 1.0
两个集合距离远,方差小,没有重合区域,所以测试结果100%正确。题主可以选择不同的中心点和方差,让数据点适度重合,就可以看到模型精度不会是100%。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 物理远程控制麦克风使用问题
- ¥15 打印预览会泄漏纸钱包密码吗
- ¥15 在hololens1上运行unity项目只有空窗口
- ¥25 TABLEAU PREP无法打开
- ¥15 百度帐号问题/centos
- ¥15 关于#c语言#的问题:求完整代码条件好说
- ¥100 HALCON DELPHI
- ¥15 (需要远程,AI不回)VB6二进制文件转换成功,但是C#转换总是失败
- ¥15 关于#matlab#的问题:有没有什么其他办法能够保证不退出进程(相关搜索:matlab调用)
- ¥15 依据报错在原代吗格式的基础上解决问题