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

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


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

机器学习算法分类
●监督学习(预测)
分类 : 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”

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

  1. 机器学习(1)——K近邻算法

    KNN的函数写法 import numpy as np from math import sqrt from collections import Counter def KNN_classify(k ...

  2. SIGAI机器学习第七集 k近邻算法

    讲授K近邻思想,kNN的预测算法,距离函数,距离度量学习,kNN算法的实际应用. KNN是有监督机器学习算法,K-means是一个聚类算法,都依赖于距离函数.没有训练过程,只有预测过程. 大纲: k近 ...

  3. 机器学习03:K近邻算法

    本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...

  4. 机器学习:k-NN算法(也叫k近邻算法)

    一.kNN算法基础 # kNN:k-Nearest Neighboors # 多用于解决分裂问题 1)特点: 是机器学习中唯一一个不需要训练过程的算法,可以别认为是没有模型的算法,也可以认为训练数据集 ...

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

    一.K近邻算法基础 KNN------- K近邻算法--------K-Nearest Neighbors 思想极度简单 应用数学知识少 (近乎为零) 效果好(缺点?) 可以解释机器学习算法使用过程中 ...

  6. 02机器学习实战之K近邻算法

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...

  7. 第四十六篇 入门机器学习——kNN - k近邻算法(k-Nearest Neighbors)

    No.1. k-近邻算法的特点 No.2. 准备工作,导入类库,准备测试数据 No.3. 构建训练集 No.4. 简单查看一下训练数据集大概是什么样子,借助散点图 No.5. kNN算法的目的是,假如 ...

  8. 机器学习算法之K近邻算法

    0x00 概述   K近邻算法是机器学习中非常重要的分类算法.可利用K近邻基于不同的特征提取方式来检测异常操作,比如使用K近邻检测Rootkit,使用K近邻检测webshell等. 0x01 原理   ...

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

    #encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...

  10. 机器学习之K近邻算法(KNN)

    机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...

随机推荐

  1. day11 Pyhton学习

    一.昨日内容回顾 函数的进阶 动态传参 *args : 位置参数的动态传参 **kwargs: 关键字参数的动态传参 形参:聚合 实参:打散 顺序:位置参数>*args >默认值 > ...

  2. c语言版去除源代码注释

    去除代码中注释需要注意下面几点 首先注释有"/*"开始到"*/"结束的多行或单行注释 其次还有"//"这种单行注释 另外还需要注意双引号和单 ...

  3. 【二分图】HEOI2012 朋友圈

    题目内容 洛谷链接 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大 ...

  4. MySQL的事务与锁 转

    资料来源: 青山老师的mysql课程 丁奇老师的<MySQL45讲> 一.文章结构和思路 1.整体文章结构 2.大概思路 介绍数据库的特性: 数据库标准所制定的隔离级别和解决对应的一致性问 ...

  5. shell脚本在后台运行以及日志重定向输出

    后台运行命令 在命令行后加上 &,表示进程到后台中执行,如:cmd & 日志输出重定向 如:cmd > out.log & Linux默认定义两个变量:1和2: 1 表示 ...

  6. ElementUI级联选择器动态加载Demo

    嗯,今天项目遇到,弄了一会,这里分享一下,不足之处请小伙伴指出来, 官网Demo: <el-cascader :props="props"></el-cascad ...

  7. C#数据结构-队列

    队列作为线性表的另一个数据结构,只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表. 先来看下用法: Queue queue = new Queue(); ...

  8. OLTP与OLAP的介绍(理论知识)

    OLTP与OLAP的介绍 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing).联机分析处理OLAP(On-Line Analytical ...

  9. Luogu P6830 [IOI2020]Connecting Supertrees

    题意 好复杂,我就不写了. 题解 口胡了一下,发现我居然会 IOI 的题? 首先发现有 \(3\) 一定不合法,因为连通块里面有一个环的话 \(p_{i,j}\) 最多为 \(2\),有两个环的话就存 ...

  10. mysql增删改查语法

    MySQL 关注公众号"轻松学编程"了解更多. MySQL是关系型数据库,对大小写不敏感. MySQL属于关系型数据库, 优点: 复杂查询 可以用SQL语句方便的在一个表以及多个表 ...