Johnnyjohnny2001 2021-08-28 22:29 采纳率: 71.4%
浏览 47
已结题

SVC分类后为什么结果只有一个

我想对比PCA降维前后模型拟合时间和得分,结果不进行降维运算后分类的结果只有一个,不知道是哪里出了问题,还是确实只能得到一个结果。(想象中应该是将test集图片分类成各个人的,但是结果出来以后都是小布什)

               precision    recall  f1-score   support

 Ariel Sharon       0.00      0.00      0.00        13
 Colin Powell       0.00      0.00      0.00        60
 Donald Rumsfeld    0.00      0.00      0.00        27
George W Bush       0.45      1.00      0.62       146
Gerhard Schroeder   0.00      0.00      0.00        25
  Hugo Chavez       0.00      0.00      0.00        15
   Tony Blair       0.00      0.00      0.00        36

     accuracy                           0.45       322
    macro avg       0.06      0.14      0.09       322
 weighted avg       0.21      0.45      0.28       322

[[ 0 0 0 13 0 0 0]
[ 0 0 0 60 0 0 0]
[ 0 0 0 27 0 0 0]
[ 0 0 0 146 0 0 0]
[ 0 0 0 25 0 0 0]
[ 0 0 0 15 0 0 0]
[ 0 0 0 36 0 0 0]]

from time import time
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import fetch_lfw_people
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.decomposition import PCA
from sklearn.svm import SVC

lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)
n_samples, h, w = lfw_people.images.shape
X = lfw_people.data
n_features = X.shape[1]
y = lfw_people.target
target_names = lfw_people.target_names
n_classes = target_names.shape[0]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

t0 = time()
param_grid = {'C': [1e3, 5e3, 1e4, 5e4, 1e5],'gamma': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.1], }
clf = GridSearchCV(SVC(kernel='rbf', class_weight='balanced'), param_grid)
clf.fit(X_train, y_train)
print("done in %0.3fs" % (time() - t0))

y_pred=clf.predict(X_test)

print(classification_report(y_test, y_pred, target_names=target_names))
print(confusion_matrix(y_test, y_pred, labels=range(n_classes)))
print(classification_report(y_test, y_pred, target_names=target_names))
print(confusion_matrix(y_test, y_pred, labels=range(n_classes)))

展开全部

  • 写回答

2条回答 默认 最新

  • CSDN专家-kaily 2021-08-30 08:32
    关注

    一共是7个人的图片是超过了70张,你打印一下这些人的图片数量:

    target = pd.DataFrame(Y)
    print(target.value_counts())
    

    输出结果为:
    3 530
    1 236
    6 144
    2 121
    4 109
    0 77
    5 71
    dtype: int64
    这说明这是一共数据分布不均匀的数据集,总样本数量为1288,用530/1288=0.41,你最终的accuracy为0.45,说明你的模型将所有的图片都划分为了George W Bush
    或者是你看

    img
    只有George W Bush的召回率不等于0,且为1,而其余的均为0,这也说明了模型只是简单的将所有的图片都分为了数量最多的George W Bush
    如果不进行降维的话,就是一个像素一个特征,就是50*37=1850,样本数才1288,特征数位1850,这是机器学习,不是深度学习啊,这里必须进行降维

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    CSDN专家-kaily 2021-08-30 08:34

    如果你要对比降维前后的训练时间,你直接比时间就好了,不进行降维就是直接将所有样本都分为数量最多的那一类,不具有查考意义

    回复
    Johnnyjohnny2001 回复 CSDN专家-kaily 2021-08-31 08:32

    感谢您的答疑。我是不是可以理解为相对于特征数量,样本提供的信息密度不够,所以必须要降维,否则模型会出问题?
    另外问下,为什么没人愿意回答我的问题呢,两次了 :(

    回复
    CSDN专家-kaily 回复 Johnnyjohnny2001 2021-08-31 08:39

    对,差不多就是这个意思,
    最近不怎么上来看了,因为暑假了,问题数量最近比较少,所以就懒得看了,可能大家都是这个原因,所以最近回答问题的少了

    1
    回复
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 9月7日
  • 已采纳回答 8月31日
  • 创建了问题 8月28日

悬赏问题

  • ¥15 STS/eclipse导入gradle项目时报错如下
  • ¥15 centos7.6进不去系统,卡在数字7界面
  • ¥15 Tensorflow采用interpreter.allocate_tensors()分配内存出现ValueError: vector too long报错
  • ¥15 使用CGenFF在线生成血红素辅基拓扑结构遇到问题
  • ¥15 在fragment使用okhttp同步上传文件,能不能在fragment销毁后还可以继续上传文件?
  • ¥20 matlab代码实现可达矩阵形成骨骼矩阵
  • ¥15 关于地板的木纹和图库中的匹配的
  • ¥30 机器学习预测疾病模型流程疑问
  • ¥50 2048Python实现
  • ¥15 使用ads进行低噪放仿真没有结果且不报错
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部