多个分类器分类make_circles及其可视化

多个分类器分类make_circles及其可视化

  1. 题目
    使用线性回归、逻辑回归、支持向量机、KNN、朴素贝叶斯对make_circles生成的数据进行分类,并输出分类精度。
  2. 代码实现
import numpy as np
from sklearn.datasets import make_circles

import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC


from scipy.optimize import linear_sum_assignment
def cluster_acc(y_true, y_pred):
    y_true = np.array(y_true).astype(np.int64)
    assert y_pred.size == y_true.size
    D = max(y_pred.max(), y_true.max()) + 1
    w = np.zeros((D, D), dtype=np.int64)
    for i in range(y_pred.size):
        w[y_pred[i], y_true[i]] += 1
    ind = linear_sum_assignment(w.max() - w)
    ind = np.asarray(ind)
    ind = np.transpose(ind)
    return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size
#
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

fig = plt.figure(1)
fig.subplots_adjust(bottom=0,top=1,left=0,right=1,hspace=0.3)
x1, y1 = make_circles(n_samples=400, factor=0.3, noise=0.1)

plt.subplot(2,3,1)
plt.title('原始数据')
plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=y1,s=10)

# 使用KNN进行分类
knn = KNeighborsClassifier()
knn.fit(x1, y1)
label_sample = knn.predict(x1)
knn_acc=accuracy_score(y1, label_sample)
print("knn","=",knn_acc)

plt.subplot(2,3,2)
plt.title('knn(acc='+str(knn_acc)+')')
plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=label_sample,s=10)


# 使用高斯朴素贝叶斯进行分类
gnb = GaussianNB()  # 使用默认配置初始化朴素贝叶斯
gnb.fit(x1,y1)  # 训练模型
label_sample = gnb.predict(x1)
gnb_acc = accuracy_score(y1, label_sample)
print("gnb","=", gnb_acc)

plt.subplot(2,3,3)
plt.title('NaiveBayes(acc='+str(gnb_acc)+')')
plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=label_sample,s=10)

# 线性回归
lr = LinearRegression()
lr.fit(x1,y1)
label_sample = lr.predict(x1)
label_sample = np.round(label_sample)
label_sample=label_sample.astype(np.int64)
lr_acc = cluster_acc(y1, label_sample)
print('lr', "=", lr_acc)
plt.subplot(2,3,4)
plt.title('LinearRegression(acc='+str(lr_acc)+')')
plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=label_sample,s=10)


#Logistic regression 需要事先进行标准化
#创建一对多的逻辑回归对象

log_reg = LogisticRegression()#multinomial
#训练模型
log_reg.fit(x1,y1)
label_sample = log_reg.predict(x1)
lsr_acc = cluster_acc(y1, label_sample)
print("lsr", "=", lsr_acc)
plt.subplot(2,3,5)
plt.title('Logistic(acc='+str(lsr_acc)+')')
plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=label_sample,s=10)
#支持向量机

scaler = StandardScaler()
x1_= scaler.fit_transform(x1, y1)
svc = SVC()
svc.fit(x1_,y1)
label_sample = svc.predict(x1_)
svc_acc = cluster_acc(y1, label_sample)
print("svc", "=", svc_acc)

plt.subplot(2,3,6)
plt.title('SVM(acc='+str(svc_acc)+')')
plt.scatter(x1_[:, 0], x1_[:, 1], marker='o', c=label_sample,s=10)
plt.show()
  1. 实验结果
    在这里插入图片描述
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值