大数据导论-大数据分析——沐雨先生

【实验目的】

掌握Pthon/R语言进行大数据分析,包括分类任务和聚类任务。掌握kNN、决策树、SVM分类器、kmeans聚类算法的Python或R语言编程方法。

【实验内容】

使用Python或R语言完成大数据分析任务
1、使用kNN、决策树、SVM模型,对iris数据集进行分类
2、使用kmeans聚类算法对iris数据集进行聚类

  • Python导入iris数据集方法
from sklearn.datasets import load_iris
iris=load_iris()
attributes=iris.data #获取属性数据
#获取类别数据,这里注意的是已经经过了处理,target里0、1、2分别代表三种类别
target=iris.target
labels=iris.feature_names#获取类别名字
print(labels)
print(attributes)
print(target)
  • R语言导入iris数据集
data("iris")
summary(iris)

我选择使用Python语言完成实验。

1.kNN算法

import random

import numpy as np
import operator
from sklearn.datasets import load_iris

iris = load_iris()
attributes=iris.data
target=iris.target
labels = iris.feature_names

f1 = attributes.tolist()
f2 = target.tolist()
i=0
dataset=[]
while i < len(attributes):
    f1[i].append(f2[i])
    dataset.append(f1[i])
    i = i+1
library = []
n = int(len(f1)*0.3)
samples = random.sample(f1, n)
for x in dataset:
    if x not in samples:
        library.append(x);

def createDataSet():
    #四组二维特征
    group = np.array(library)
    #四组特征的标签
    labels = f2
    return group, labels

def classify0(inX, dataSet, labels, k):
    '''
        :param inX: 测试样本(arr)
        :param dataSet: 训练数据集(arr)
        :param labels: 类别(list)
        :param k:(int)
        :return: 类别
    '''
    #计算距离
    dataSetSize = dataSet.shape[0]  # 样本数量
    diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet #tile(inX{数组},(dataSetSize{倍数},1{竖向})):将数组(inX)竖向(1)复制dataSetSize倍
    sqDiffMat = diffMat ** 2                        #先求平方
    sqDistances = sqDiffMat.sum(axis=1)             #再求平方和
    distances = sqDistances ** 0.5                  #开根号,欧式距离
    sortedDistIndicies = distances.argsort()  #距离从小到大排序的索引
    classCount = {
   }
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]  #用索引得到相应的类别
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
    return max(classCount, key=lambda k: classCount[k])  # 返回频数最大的类别

if __name__ == '__main__':
    #创建数据集
    group, labels = createDataSet()
    #测试集
    i=0;
    while i<len(samples):
        test_class = classify0(samples[i], group, labels, 3)
        print("测试用例:",samples[i],"所属类别: ",test_class)
        i+=1
    #打印分类结果

2.决策树算法

# tree.py
import copy
import random
from sklearn.datasets import load_iris

# 找到出现次数最多的分类名称
import operator
# 计算给定数据集的熵
from math import log


def calShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {
   }
    # 为所有可能的分类创建字典
    for featVec in dataSet:
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    shannonEnt = 0.0
    for key in labelCounts:
        # 计算熵,先求p
        prob = float(labelCounts[key]) / numEntries
        shannonEnt -= prob * log(prob, 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐雨先生

如果真的帮助到你了再打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值