机器学习3《数据集与k-近邻算法》

机器学习数据类型:    ●离散型数据:由记录不同类别个体的数目所得到的数据,又称计数数据,所    有这些数据全部都是整数,而且不能再细分,也不能进一步提高他们的精确度。

    ●连续型数据:交量可以在某个范围内取任一数,即变量的取值可以是连续    的,如,长度,时间、质量值等,这类整数通常是非整数,含有小数部分。

    注:只要记住一点,离散型是区间内不可分,连续型是区间内可分

机器学习算法分类●监督学习(预测)        分类 :  k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络        回归  : 线性回归、岭回归        标注 : 隐马尔可夫模型(不做要求).        注: 在监督学习里面 分类的数据类型是离散 回归的数据类型是连续●无监督学习 :         聚类  k-means

再解释一下fit_transform() = 输入数据转换数据                fit() = 输入数据单不转换 先计算                transform() = 转换数据

我们在机器学习中少不了对大数据的分析与处理,那么我们的数据怎么来呢?并且我们的数据是怎么训练呢?

sklearn里面保存了许多的数据集

scikit learn 数据集介绍sklearn.datasets    加载获取流行数据集    datasets.load_*()        获取小规模数据集,数据包含在datasets里    datasets.fetch_*(data_home=None)        获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载目录,默认是./scikit_learn_data/

    load_* 与 fetch_* 返回的数据类型是datasets.base.Bunch(字典格式)        data: 特征数据数组,是[n_sample * n_features]的二维 numoy.ndarray数组        target: 标签数组,是n_samples的一维 numpy.ndarray 数组        DESCR:数据描述        feature_name: 特征名,新闻数据,手写数字,回归数据集没有        target_name: 标签名        eg:            用于分类的大数据集                sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train‘)                    subset: train或者test, all 可选,选择需要加载的数据集,训练集的训练,测试集的测试, 两者的全部                                                                一般都是all 然后自己用train_test_split()划分            回归数据集:                datasets.load_boston()----------加载并返回boston房价数据集                datasets.load_diabetes()--------加载并返回糖尿病数据集        sklearn.datasets.clear_data_home(data_home)            清除目录下的数据

测试集与数据集的分割

机器学习一般的数据集会划分为两个部分    训练集:用于训练,构建模型    测试数据:在模型检验时使用,用于评估模型是否有效        一般 训练集 :测试集 = 0.75 :0.25        数据集进行分割:            API: sklearn.model_selection.train_test_split                X =  数据集的特征值                Y =  数据集的标签                test_size : 测试集的大小一般为float                random_state : 随机种子,不同的种子会造成不同的随机采样结果,相同的种子,采样结果相同                return : 训练集的特征值, 测试集的特征值, 训练标签,测试标签(默认随机抽取)

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
def bird():
    data = load_iris()
    print(‘data:\n‘, data.data)
    print(‘target:\n‘, data.target)
    print(‘DESCR: ‘, data.DESCR)

    print(‘-----------------------------------------------------------------‘)
    data_train, data_text, target_train, target_text = train_test_split(data.data, data.target, test_size=0.25)
    print(‘data 训练集:‘, data_train)
    print(‘target‘)
    print(‘data 测试集:‘, data_text)

load_iris 数据集与分割

k-近邻算法

k-近临算法:KNN  ----------------------需要做标准化    哪个理你最近哪个的类型就是你的类型(比较最近)    定义(如果一个样本在特征空间中的k个最相似(即特征空间中最临近)的样本中的人大多数属于某一个类别,则该样本也属于这个类型)    公式: ({a - a‘}^2 +(b+b‘)^2...)的根号项    k值影响:        k值取很小: 容易受异常点影响        k值取很大: 容易受k值数量(类别)波动    优点:        简单,易于理解,易于实现,无需估计参数,无需训练    缺点:        懒惰算法,对测试样本分类时的计算量大,内存开销大        必须指定k值,k值选择不当则分类精度不能保证    使用场景:        小数据场景,几千 几万样本,具体场景具体业务去测试    API: sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, algorithm=‘auto‘)        参数:            n_neighbors: int 可选默认为5(邻居数) ,k_neighbors 查询默认使用的邻居数

            algorithm:{‘auto‘, ‘ball_tree‘, ‘kd_tree‘, ‘brute‘} 可选用与计算最近邻居的算法            ‘ball_tree‘ 将会使用balltrue, kd_tree将使用KDtree ‘auto’ 将尝试更具传递给fit放大的值来决定最合适的算法。(不同实现方法影响效率)

        knn = KNeighborsClassifier()        knn.fit(data) 传入数据        knn.score(x_test, y_test)          knn.predict(x_test)  # 预测特征测试集的目标集

eg:以下是facebook的一个数据集的用knn算法预测的实例

def knn():
    data = pd.read_csv(‘./train.csv‘)
    data = data.query(‘x>1 & x<2 & y>1 &y<2‘)

    place_count = data.groupby(‘place_id‘).count()    # 此时的index以悄然变成了place_id  且此时place_count会保留出place_id以外的特征,数值都为次数
    # 对所有的列进行计数汇总,详细请见https://blog.csdn.net/yiyele/article/details/80605909
    tf = place_count[place_count[‘row_id‘] > 3].reset_index()  # 挑选出次数小于30次的
    # tf = tf.reset_index()
    data = data[data[‘place_id‘].isin(tf.place_id)]

    time_value = pd.to_datetime(data[‘time‘], unit=‘s‘)
    # 拿到time value后发现斗个同一个的数据,所以我们可以去除中国干扰
    #                   并且日期和周末都可能影响,所以我们分开去测试,
    time_value = pd.DatetimeIndex(time_value)   # pd.DateIndex()就可以把日期格式转换成pd.Series的数据
    print(‘----------- time_value -----------------------‘)
    print(time_value)
    print(type(time_value))
    # 为数据添加新的特征
    data[‘day‘] = time_value.day
    data[‘hour‘] = time_value.hour
    # data[‘minute‘] = time_value.minute
    # data[‘week‘] = time_value.week
    data[‘weekday‘] = time_value.weekday

    # 去除掉老的特征
    data.drop([‘time‘], axis=1)

    print(‘----------- data -----------------------‘)
    print(data.head(10))
    print(type(data))

    # 分割数据
    ‘‘‘
        X: 特征集
            x_train:训练集
            x_test:测试集 

        Y:目标集
            y_train:训练集
            y_test:测试集

    ‘‘‘
    # 目标集
    y = data.place_id
    # 特征集
    x = data.drop([‘place_id‘], axis=1)

    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

    # 特征工程 标准化
    # 需要标准化的是特征值的训练集和测试集
    st = StandardScaler()
    st.fit(x_train)
    x_train = st.transform(x_train)
    x_test = st.transform(x_test)

    # k-近邻
    Knn = KNeighborsClassifier()
    Knn.fit(x_train, y_train)
    _float_score = Knn.score(x_test, y_test)  # x_text, y_text  计算匹配度float32类型
    _y_test = Knn.predict(x_test)  # 预测特征测试集的目标集

    print(_float_score)

facebook社区签到预测

在这个示例里面额外掌握的pandas的知识有

  1.data = data.query(‘x>1 & x<2 & y>1 & y<2‘)    data是pd.DataFrame格式

  2.  将place_id的数据少于 3个的删除

  place_count = data.groupby(‘place_id‘).count()    # 此时的index以悄然变成了place_id  且此时place_count会保留出place_id以外的特征,数值都为次数                                 # 对所有的列进行计数汇总,详细请见https://blog.csdn.net/yiyele/article/details/80605909  tf = place_count[place_count[‘row_id‘] > 3].reset_index()  # 挑选出次数小于30次的此时的rows是place_id 所以我们需要重新reset_index  # tf = tf.reset_index()  data = data[data[‘place_id‘].isin(tf.place_id)]  # 按照tf里面的筛选

  3.处理日期数据:

    pd.to_datetime(x)  x的格式为时间戳

    pd.DatetimeIndex
 

eg2: 以下是 鸢尾花的测试

# _*_coding:utf-8_*_
# /usr/bin/env python3
# Author:book Miki

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
def knn_ir():
    # 加载数据
    ir = load_iris()

    # 分割数据
    ‘‘‘
    X: 特征值
        X_train: 特征训练集
        X_test: 特征测试集
    Y:目标值
        X_train: 特征训练集
        X_test: 特征测试集
    ‘‘‘
    X = ir[‘data‘]
    Y = ir[‘target‘]
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25)

    # 特征工程  标准化
    ss = StandardScaler()
    ss.fit(X)
    X_train = ss.transform(X_train)
    X_test = ss.transform(X_test)

    # k 近邻回归

    knn = KNeighborsClassifier(n_neighbors=3)
    knn.fit(X_train, Y_train)

    result = knn.score(X_test, Y_test)
    print(‘匹配度为:‘, result)

knn_ir()

鸢尾花

预测结果为   “匹配度为: 0.9736842105263158”

原文地址:https://www.cnblogs.com/BookMiki/p/10520398.html

时间: 2024-11-09 03:41:40

机器学习3《数据集与k-近邻算法》的相关文章

机器学习实战笔记-K近邻算法1(分类动作片与爱情片)

K近邻算法采用测量不同特征值之间的距离方法进行分类 K近邻算法特点: 优点:精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用数据范围:数值型和标称型. K近邻算法原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系.输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的 特征进行比较,然后算法提取样本集中特征最相似数据(最近 邻)的分类标签.一般来说,我们只选择样本数据集中前k个最

机器学习实战笔记-K近邻算法2(改进约会网站的配对效果)

案例二.:使用K-近邻算法改进约会网站的配对效果 案例分析: 海伦收集的数据集有三类特征,分别是每年获得的飞行常客里程数.玩视频游戏所耗时间百分比. 每周消费的冰淇淋公升数.我们需要将新数据的每个新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签.一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数.最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类. 流程:在约会网站上使用K

机器学习之KNN(k近邻)算法

1.算法介绍k近邻算法是学习机器学习的入门算法,可实现分类与回归,属于监督学习的一种.算法的工作原理是:输入一个训练数据集,训练数据集包括特征空间的点和点的类别,可以是二分类或是多分类.预测时,输入没有类别的点,找到k个与该点距离最接近的点,使用多数表决的方法,得出最后的预测分类. 2.算法优缺点优点:没有高深的数学思想,容易理解,精度高,对异常值不敏感,无数据输入假定:缺点:计算复杂度高,空间复杂度高:理解:因为knn算法是寻找与目标点接近的点,在计算时,异常值与目标点的"距离"会较

机器学习实战笔记--k近邻算法

1 #encoding:utf-8 2 from numpy import * 3 import operator 4 import matplotlib 5 import matplotlib.pyplot as plt 6 7 from os import listdir 8 9 def makePhoto(returnMat,classLabelVector): #创建散点图 10 fig = plt.figure() 11 ax = fig.add_subplot(111) #例如参数为

机器学习(四) 机器学习(四) 分类算法--K近邻算法 KNN (下)

六.网格搜索与 K 邻近算法中更多的超参数 七.数据归一化 Feature Scaling 解决方案:将所有的数据映射到同一尺度 八.scikit-learn 中的 Scaler preprocessing.py import numpy as np class StandardScaler: def __init__(self): self.mean_ = None self.scale_ = None def fit(self, X): """根据训练数据集X获得数据的均

机器学习随笔01 - k近邻算法

算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. 度量每个特征的程度,将其数字化. 所有特征值构成元组,作为该对象的坐标. 计算待检测对象和所有已知对象的距离,选择距离最接近的k个已知对象 (k近邻中的k来源于此). 这k个对象中出现次数最多的分类就是待检测对象的分类. 重要前提: 需要有一批已经正确归类了的对象存在.也就是通常说的训练数据. 重

从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经网络:3.编程艺术第28章.你看到,blog内的文章与你于别处所见的任何都不同.于是,等啊等,等一台电脑,只好等待..”.得益于田,借了我一台电脑(借他电脑的时候,我连表示感谢,他说“能找到工作全靠你的博客,这点儿小忙还说,不地道”,有的时候,稍许感受到受人信任也是一种压力,愿我不辜负大家对我的信任)

K近邻算法

1.1.什么是K近邻算法 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1时,算法便成了最近邻算法,即寻找最近的那个邻居.为何要找邻居?打个比方来说,假设你来到一个陌生的村庄,现在你要找到与你有着相似特征的人群融入他们,所谓入伙. 用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居),这K个实例的多数属

KNN K~近邻算法笔记

K~近邻算法是最简单的机器学习算法.工作原理就是:将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似的数据的分类标签.一般来说,只提取样本数据集中前K个最相似的数据.通常K不大于20,最后选择K个最相似数据中出现次数最多的分类,最为新的数据分类. 但是K~近邻算法必须保存全部的数据集,如果训练数据集很大,必须使用打量的存储空间.此外,由于必须对数据集中每个数据集计算距离值,实际使用起来会非常耗时间.

用Python从零开始实现K近邻算法

K近邻算法 (或简称kNN)是易于理解和实现的算法,而且是你解决问题的强大工具. http://python.jobbole.com/87407/ 在本教程中,你将基于Python(2.7)从零开始实现kNN算法.该实现主要针对分类问题,将会用鸢尾花分类问题来演示. 这篇教程主要针对Python程序员,或者你可以快速上手Python,并且对如何从零实现kNN算法感兴趣. kNN算法图片,来自Wikipedia,保留所有权利 什么是kNN kNN算法的模型就是整个训练数据集.当需要对一个未知数据实