精华内容
下载资源
问答
  • 西瓜数据集3.0-数据集

    2021-03-04 21:37:37
    西瓜数据集3.0 包括(3.0和3.0a) watermelon_3.csv watermelon_3a.csv
  • 西瓜数据集3.0.xlsx

    2021-06-17 19:17:25
    《机器学习》(西瓜书)上的西瓜数据集3.0
  • 西瓜数据集 3.0α 上分别用线性核和高斯核训练一个 SVM,并比较其支持向量的差别。 数据集下载地址: https://amazecourses.obs.cn-north-4.myhuaweicloud.com/datasets/watermelon_3a.csv 任选数据集中的一种分布...

    在西瓜数据集 3.0α 上分别用线性核和高斯核训练一个 SVM,并比较其支持向量的差别。
    数据集下载地址:
    https://amazecourses.obs.cn-north-4.myhuaweicloud.com/datasets/watermelon_3a.csv
    任选数据集中的一种分布类型的数据,分别用软、硬间隔SVM和各类核函数训练,并分析他们分类的效果。
    数据集下载地址:https://amazecourses.obs.cn-north-4.myhuaweicloud.com/datasets/SVM.zip

    由于课业繁忙,实在是没有时间从底层数学逻辑来实现SVM从而更好地理解把握支持向量机的原理。因此本次作业利用sklearn实现。
    此博客为第一问的SVM的简单实现。
    1. SVM实现
    下方的链接博客很详细的给出了sklearn中SVM的参数,值得参考。

    https://www.cnblogs.com/guodavid/p/10174763.html

    • 数据导入与处理
    def load_dataset(fname):
        # fname = 'ensemble_study/dataset/weatherHistory.csv'
        data = pd.read_csv(fname, index_col=0)
        return data
    
    
    def process_data(data: pd.core.frame.DataFrame):
        data.drop('编号', axis=1, inplace=True)
        feature_list = data['色泽'].unique().tolist()
        # print(feature_list)
        data['色泽'] = data['色泽'].apply(lambda n: feature_list.index(n))
        feature_list = data['根蒂'].unique().tolist()
        data['根蒂'] = data['根蒂'].apply(lambda n: feature_list.index(n))
        feature_list = data['敲声'].unique().tolist()
        data['敲声'] = data['敲声'].apply(lambda n: feature_list.index(n))
        feature_list = data['纹理'].unique().tolist()
        data['纹理'] = data['纹理'].apply(lambda n: feature_list.index(n))
        feature_list = data['脐部'].unique().tolist()
        data['脐部'] = data['脐部'].apply(lambda n: feature_list.index(n))
        feature_list = data['触感'].unique().tolist()
        data['触感'] = data['触感'].apply(lambda n: feature_list.index(n))
        feature_list = ['否', '是']
        data['好瓜'] = data['好瓜'].apply(lambda n: feature_list.index(n))
    
        return data
    
    
    def split_train_test_set(data: pd.core.frame.DataFrame):
        y = data['好瓜'].values
        data.drop('好瓜', axis=1, inplace=True)
        xtrain, xtest, ytrain, ytest = train_test_split(data, y, test_size=0.2)
        return xtrain, xtest, ytrain, ytest
    

    数据处理部分主要做的是将数据集中的中文特征标签全部利用序列号编号处理,即利用数值来代表,再去除掉编号这一无用数据特征,将目标特征单独提出,之后利用sklearn的train_test_split方法随机划分数据集。

    - 线性核,高斯核的支持向量机实现

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2020/12/19 19:54
    # @Author  : Ryu
    # @Site    : 
    # @File    : SVM.py
    # @Software: PyCharm
    
    from data_process import *
    from sklearn import svm
    from sklearn.metrics import accuracy_score
    from visual import visual
    import copy
    
    if __name__ == '__main__':
        file_name = 'D:\Pythonwork\FisherLDA\SVM\watermelon_3a.csv'
    
        data = load_dataset(file_name)
        raw_data = copy.deepcopy(data)
        train = process_data(raw_data)
        xtrain, xtest, ytrain, ytest = split_train_test_set(train)
    
        # 线性核处理
        linear_svm = svm.LinearSVC(C=0.5, class_weight='balanced')
        linear_svm.fit(xtrain, ytrain)
        y_pred = linear_svm.predict(xtest)
        print('线性核的准确率为:{}'.format(accuracy_score(y_pred=y_pred, y_true=ytest)))
    
        # 高斯核处理
        gauss_svm = svm.SVC(C=0.5, kernel='rbf', class_weight='balanced')
        gauss_svm.fit(xtrain, ytrain)
        y_pred2 = gauss_svm.predict(xtest)
        print('高斯核的准确率: %s' % (accuracy_score(y_pred=y_pred2, y_true=ytest)))
    
        #多项式核
        poly_svm = svm.SVC(C=0.5, kernel='poly', degree=3, gamma='auto', coef0=0, class_weight='balanced')
        poly_svm.fit(xtrain, ytrain)
        y_pred3 = poly_svm.predict(xtest)
        print('多项式核的准确率: %s' % (accuracy_score(y_pred=y_pred3, y_true=ytest)))
    
        #sigmoid核
        sigmoid_svm = svm.SVC(C=0.5, kernel='sigmoid', degree=3, gamma='auto', coef0=0, class_weight='balanced')
        sigmoid_svm.fit(xtrain, ytrain)
        y_pred4 = sigmoid_svm.predict(xtest)
        print('sigmoid核的准确率: %s' % (accuracy_score(y_pred=y_pred4, y_true=ytest)))
    
    
        visual(data, 'gauss_svm', gauss_svm)
        visual(data, 'sigmoid svm', sigmoid_svm)
    
    

    需要说明的是,上述代码中惩罚系数均使用0.5完成。线性核和高斯核的两个SVM中笔者均将class_weighted这个参数设置为了‘balanced’,利用自动计算的样本权值来调整数据集分布——主要愿意是样本数据只有17个,实在是太小了,导致任意一个样本的分类不当都会对整个SVM的准确率产生极大的影响。

    • 实验分析
      在这里插入图片描述
      在class_weighted参数未加入时,实验效果极差。由于样本数很少,划分训练测试数据集时比率取到0.2已是极限。在这种情况下,如果不采用加权样本分类的方法,两个核函数的SVM最终结果基本只有很小概率能够达到50%以上。在加入了之后正确率基本能够稳定在67%以上。并且线性划分的效果基本都好于高斯核的效果。这可能也与训练集过于简单有关。在这里插入图片描述
      由于线性svm在sklearn中没有特征向量支持,故选用sigmoid的核替代展示。可以明显的发现,sigmoid的分类效果不尽人如意。

    在这里插入图片描述
    高斯核的分类效果相较sigmoid更好,经多次试验发现也更加稳定。

    展开全文
  • 3.3编程实现对率回归,并给出西瓜数据集3.0α上的结果数据集: 1 0.697 0.460 1 2 0.774 0.376 1 3 0.634 0.264 1 4 0.608 0.318 1 5 0.556 0.215 1 6 0.403 0.237 1 7 0.481 0.149 1 8 0.437 0.211 1 9 0....

    3.3编程实现对率回归,并给出西瓜数据集3.0α上的结果

    数据集:

    • 1 0.697 0.460 1
      2 0.774 0.376 1
      3 0.634 0.264 1
      4 0.608 0.318 1
      5 0.556 0.215 1
      6 0.403 0.237 1
      7 0.481 0.149 1
      8 0.437 0.211 1
      9 0.666 0.091 0
      10 0.243 0.267 0
      11 0.245 0.057 0
      12 0.343 0.099 0
      13 0.639 0.161 0
      14 0.657 0.198 0
      15 0.360 0.370 0
      16 0.593 0.042 0
      17 0.719 0.103 0

    MATLAB 代码

    clear
    clc
    data = load('gua.txt');  
    X = data(:, [2, 3]); y = data(:, 4);  
    figure; 
    hold on;  
    pos=find(y==1);  
    neg=find(y==0); 
    data(pos,4)
    plot(X(pos,1),X(pos,2),'g.','LineWidth',2,'MarkerSize',7);  
    plot(X(neg,1),X(neg,2),'k.','MarkerFaceColor','y','MarkerSize',7);  
    % Labels and Legend  
    xlabel('密度')  
    ylabel('含糖率')  
    hold off;  
    [m, n] = size(X) ;
    % Add intercept term to x and X_test  
    X = [X ones(m, 1) ];
    % Initialize fitting parameters  
    initial_theta = zeros(n + 1, 1)  ;
    options = optimset('GradObj', 'on', 'MaxIter', 400);  
    [theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);  
    hold on;
        plot_x = X(:,1) ; 
        y = X*theta ;
        plot_y=1./(1.+exp(-1.*y))
        plot(plot_x, plot_y,'r+','LineWidth',2,'MarkerSize',7)    
    hold off;  
    
    function [J, grad] = costFunction(theta, X, y)  
    m = length(y); % number of training examples  
    J = 0;  
    grad = zeros(size(theta));  
    h=1.0./(1.0+exp(-1*X*theta));  
    m=size(y,1);  
    J=((-1*y)'*log(h)-(1-y)'*log(1-h))/m;  
    for i=1:size(theta,1),  
        grad(i)=((h-y)'*X(:,i))/m;  
    end  
    end  

    结果:
    这里写图片描述

    黑点负例
    绿点正例
    红点 X轴密度,y轴y值
    结果:

    • 0.971079254646882 1
      0.937598463307093 1
      0.705751586241412 1
      0.812393063785119 1
      0.504856248448885 1
      0.453265086556073 0
      0.261482588297326 0
      0.400249657018173 0
      0.235208808199154 0
      0.421463325239397 0
      0.0508913086555173 0
      0.109609784911483 0
      0.403185071514151 0
      0.531250393637467 1
      0.791459430045055 1
      0.117240356541242 0
      0.296693337407861 0

    以0.5做阈值:数据太少,不太好

    展开全文
  • MATLAB编程实现线性判别分析,给出西瓜数据集3.0a上的结果。 1.线性判别分析理论 LDA(Linear Discriminant Analysis)的思想非常朴素:找出一条支线,使同类的样本在直线上的投影点尽可能近,异类的样本在直线上的...

    参考博客:https://blog.csdn.net/qq_20406597/article/details/80166589

    MATLAB编程实现线性判别分析,给出西瓜数据集3.0a上的结果。

    1.线性判别分析理论

    • LDA(Linear Discriminant Analysis)的思想非常朴素:找出一条支线,使同类的样本在直线上的投影点尽可能近,异类的样本在直线上的投影点尽可能远。
    • 涉及的公式:
      1. 类内散度矩阵:
        类内散度矩阵计算
        类内散度矩阵计算
        其中,μi为第i类样本的均值。
      2. 类间散度矩阵:
        类间散度矩阵
        其中,mi为第i类样本的数量,μ为全部样本的均值。
      3. 求最大广义特征值所对应的特征向量
        广义特征值
        广义特征值
        求出W中的最大特征向量,就可以确定直线的方向k,再利用y=kx+b基本公式,即可求出二维的直线方程。
      4. 点到直线的投影
        在这里插入图片描述
        注: 这里打草稿的时候默认b等于0了吼。。(因为b只影响直线的上下位移,不影响投影情况,所以可以直接把b看作0方便计算)。

    2.Matlab代码实现

    X = load('data.txt');
    True_number = find(X(:,3)==1);
    False_number = find(X(:,3)==0);
    X1 = X(True_number,1:2);
    X0 = X(False_number,1:2);
    hold on;
    plot(X1(:,1),X1(:,2),'r+','markerfacecolor',[1,0,0]);
    plot(X0(:,1),X0(:,2),'b*','markerfacecolor',[0,0,1]);
    grid on;
    
    %%%%求均值
    M1 = mean(X1);
    M0 = mean(X0);
    M = mean([X1;X0]);
    
    %%%%将需要的数据化为对应的矩阵形式,方便后续计算
    p = size(X1,1);
    q = size(X0,1);
    M1_p = repmat(M1,p,1);
    M0_q = repmat(M0,q,1);
    M_p = repmat(M,p,1);
    M_q = repmat(M,q,1);
    
    %%%%计算类内散度矩阵
    Sw1 = (X1-M1_p)'*(X1-M1_p);
    Sw0 = (X0-M0_q)'*(X0-M0_q);
    Sw = Sw1+Sw0;
    
    %%%%计算类间散度矩阵
    Sb1 = p*(M1_p-M_p)'*(M1_p-M_p);
    Sb0 = q*(M0_q-M_q)'*(M0_q-M_q);
    Sb = Sb1+Sb0;
    
    %%%%求出最大特征值对应的最大特征向量
    [vector,eigen] = eig(inv(Sw)*Sb);
    [a,b] = max(max(eigen));
    max_vector = vector(:,b);
    
    %%%%求出直线方程
    k = max_vector(2)/max_vector(1);
    b = 0;
    x = 0:1;
    y = k*x + b;
    hold on;
    plot(x,y);
    
    %%%%计算两类样本在直线上的投影
    points1=zeros(p,2);
    for i=1:p
        x1 = (X1(i,1)+k*X1(i,2))/(k^2+1);
        y1 = k*x1+b;
        points1(i,1)=x1;
        points1(i,2)=y1;
    end 
    
    points0=zeros(q,2);
    for i=1:q
        x0 = (X0(i,1)+k*X0(i,2))/(k^2+1);
        y0 = k*x0+b;
        points0(i,1)=x0;
        points0(i,2)=y0;
    end 
    hold on;
    plot(points1(:,1),points1(:,2),'r+','markerfacecolor',[1,0,0]);
    plot(points0(:,1),points0(:,2),'b*','markerfacecolor',[0,0,1]);
    

    3. 绘制结果

    在这里插入图片描述

    附:data.txt

    0.697 0.460 1
    0.774 0.376 1
    0.634 0.264 1
    0.608 0.318 1
    0.556 0.215 1
    0.403 0.237 1
    0.481 0.149 1
    0.437 0.211 1
    0.666 0.091 0
    0.243 0.267 0
    0.245 0.057 0
    0.343 0.099 0
    0.639 0.161 0
    0.657 0.198 0
    0.360 0.370 0
    0.593 0.042 0
    0.719 0.103 0

    展开全文
  • 普通版 编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜 1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,0.697,0.46,是 2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,0.774,0.376,是 3,乌黑,蜷缩,浊响,清晰,凹陷,硬滑,0.634,0.264,...

    普通版

    编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜 
    1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,0.697,0.46,是 
    2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,0.774,0.376,是 
    3,乌黑,蜷缩,浊响,清晰,凹陷,硬滑,0.634,0.264,是 
    4,青绿,蜷缩,沉闷,清晰,凹陷,硬滑,0.608,0.318,是 
    5,浅白,蜷缩,浊响,清晰,凹陷,硬滑,0.556,0.215,是 
    6,青绿,稍蜷,浊响,清晰,稍凹,软粘,0.403,0.237,是 
    7,乌黑,稍蜷,浊响,稍糊,稍凹,软粘,0.481,0.149,是 
    8,乌黑,稍蜷,浊响,清晰,稍凹,硬滑,0.437,0.211,是 
    9,乌黑,稍蜷,沉闷,稍糊,稍凹,硬滑,0.666,0.091,否 
    10,青绿,硬挺,清脆,清晰,平坦,软粘,0.243,0.267,否 
    11,浅白,硬挺,清脆,模糊,平坦,硬滑,0.245,0.057,否 
    12,浅白,蜷缩,浊响,模糊,平坦,软粘,0.343,0.099,否 
    13,青绿,稍蜷,浊响,稍糊,凹陷,硬滑,0.639,0.161,否 
    14,浅白,稍蜷,沉闷,稍糊,凹陷,硬滑,0.657,0.198,否 
    15,乌黑,稍蜷,浊响,清晰,稍凹,软粘,0.36,0.37,否 
    16,浅白,蜷缩,浊响,模糊,平坦,硬滑,0.593,0.042,否 
    17,青绿,蜷缩,沉闷,稍糊,稍凹,硬滑,0.719,0.103,否
    

    ONE_HOT编码版

    1, 0, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0.697,0.46, 1
    0, 1, 0,  1, 0, 0,  0, 1, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0.774,0.376, 1
    0, 1, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0.634,0.264, 1
    1, 0, 0,  1, 0, 0,  0, 1, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0.608,0.318, 1
    0, 0, 1,  1, 0, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0,  1, 0, 0.556,0.215, 1
    1, 0, 0,  0, 1, 0,  1, 0, 0,  1, 0, 0,  0, 1, 0,  0, 1, 0.403,0.237, 1
    0, 1, 0,  0, 1, 0,  1, 0, 0,  0, 1, 0,  0, 1, 0,  0, 1, 0.481,0.149, 1
    0, 1, 0,  0, 1, 0,  1, 0, 0,  1, 0, 0,  0, 1, 0,  1, 0, 0.437,0.211, 1
    0, 1, 0,  0, 1, 0,  0, 1, 0,  0, 1, 0,  0, 1, 0,  1, 0, 0.666,0.091, 1
    1, 0, 0,  0, 0, 1,  0, 0, 1,  1, 0, 0,  0, 0, 1,  0, 1, 0.243,0.267, 0
    0, 0, 1,  0, 0, 1,  0, 0, 1,  0, 0, 1,  0, 0, 1,  1, 0, 0.245,0.057, 0
    0, 0, 1,  1, 0, 0,  1, 0, 0,  0, 0, 1,  0, 0, 1,  0, 1, 0.343,0.099, 0
    1, 0, 0,  0, 1, 0,  1, 0, 0,  0, 1, 0,  1, 0, 0,  1, 0, 0.639,0.161, 0
    0, 0, 1,  0, 1, 0,  0, 1, 0,  0, 1, 0,  1, 0, 0,  1, 0, 0.657,0.198, 0
    0, 1, 0,  0, 1, 0,  1, 0, 0,  1, 0, 0,  0, 1, 0,  0, 1, 0.360,0.370, 0
    0, 0, 1,  1, 0, 0,  1, 0, 0,  0, 0, 1,  0, 0, 1,  1, 0, 0.593,0.042, 0
    1, 0, 0,  1, 0, 0,  0, 1, 0,  0, 1, 0,  0, 1, 0,  1, 0, 0.719,0.103, 0
    
    展开全文
  • 线性回归二分类问题,就是在数据集所在平面,找到一条线,将其划分成两个区域,最优解肯定是,100%正确划分,但是这种往往是过拟合现象。 先看数据集 首先标号肯定是没有用的,因此有价值的只有midu 和tang ,我们...
  • """ author:@Liu """ from numpy import * ... #训练数据集 watermelonList = [ ['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑'],\ ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑'],\ ...
  • 《机器学习(周志华)》 西瓜数据集3.0

    万次阅读 多人点赞 2016-03-24 14:23:40
    书上的一个常用数据集 编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜 1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,0.697,0.46,是 2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,0.774,0.376,是 3,乌黑,蜷缩,浊响,清晰,凹陷,硬滑,0...
  • 【机器学习】西瓜书_周志华,习题集6.2,使用LIBSVM在西瓜数据集3.0a上分别用线性核和高斯核训练一个SVM,并比较其支持向量的差别。 参考资料: LibSVM: https://www.csie.ntu.edu.tw/~cjlin/libsvm/ github: ...
  • 书上的一个常用数据集 [plain] view plain copy 编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜  1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,0.697,0.46,是  2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,0.774,0...
  • 西瓜书8.3 从网上下载或资金编程实现AdaBoost,以不剪枝决策树为基学习器,在西瓜数据集3.0α上训练一个AdaBoost集成,并与图8.4进行比较. 题意分析 若基学习器直接采用不剪枝决策树,则基本上训练后的每个决策树...
  • #机器学习线性判别分析3.5题 import numpy as np import matplotlib.pyplot as plt data = [[0.697, 0.460, 1], ...3.5编程实现线性判别分析,并给出西瓜数据集3.0α上的结果。 代码如上,运行得到如下图结果:    
  • 数据如下: python 代码如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Jan 30 10:05:01 2018 @author: llw """ #logistic regression import numpy as np from sklearn.cross_...
  • 西瓜数据集3.0α # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import svm import pandas as pd from sklearn.metrics import accuracy_score#返回正确的比例 from ...
  • 西瓜数据集

    2019-05-22 14:55:22
    西瓜数据集3.0 及西瓜数据集4.0 ,方便以后学习与使用。
  • 包括了西瓜数据集2.0、西瓜数据集3.0、西瓜数据集4.0以及缺失的3.0数据。文件格式为csv,使用pandas.read_csv即可轻松读取。
  • 周志华《机器学习》一书中大量例题习题用到了“西瓜数据集3.0”和“西瓜数据集3.0a”,两个数据集的区别是“西瓜数据集3.0”有离散属性而“西瓜数据集3.0a”都是连续属性。生成这两个数据集的代码如下,运行代码即可...
  • 西瓜书里面常用的三个数据集,西瓜数据集2.0,3.0,4.0...西瓜数据集3.0 西瓜数据集4.0   import pandas as pd def createDataSet_2(): dataSet_2 = [ # 1 ['青绿', '蜷缩', '浊响', '清晰', '凹陷',...
  • 西瓜数据集 3.0α 的"密度"为输入"含糖率"为输出,训练一个 SVR。 本博客为基于sklearn的西瓜数据集的SVR回归实现。由于代码量较少故放于一个程序中展示。 1. 程序实现 #!/usr/bin/env python # -*- coding: utf-...
  • 西瓜数据集3.0 编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜 1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,0.697,0.46,是 2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,0.774,0.376,是 3,乌黑,蜷缩,浊响,清晰,凹陷,硬滑,...
  • 求教,使用LDA对西瓜3.0数据集进行分类,使用前80%训练后20%测试,并输出其精度。 查了下网上都是对西瓜3.0a进行分类的项目,但是我不明白该如何对高维数据进行分类,最好能给出源码,不胜感激!

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 137
精华内容 54
关键字:

西瓜数据集3.0