软件技术部第一次机器学习培训

学习方式

监督学习

在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。

非监督学习

在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。(例如K-means算法)

半监督学习

在半监督式学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。

强化学习

在强化学习方式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。(例如游戏AI)

监督学习解决的两类主要问题

分类问题

通过训练,使得计算机可以将新的输入进行判断并分到某个已经规定的类别,或者将一系列输入进行自分类

回归问题

我们需要回归一个结果。在实际的回归问题中,我们常常会有一个训练集来训练“参数”,在经过训练之后就可以利用这些已有参数进行计算。

KNN算法

KNN算法介绍

KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。

简化的KNN原理

KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。

距离的计算

通常KNN算法采用的是欧式距离。以二维空间为例,公式如下:

对于多维空间:

自己实现KNN代码

import numpy as np
import matplotlib.pyplot as pltdata_X = np.random.rand(10, 2)
data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
print(data_X)X_train = data_X
y_train = np.array(data_y)#绘制散点图
plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], color='g')
plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], color='r')
plt.show()#制造一个测试点
x = np.array([0.8, 0.7])#将测试点也绘制进散点图
plt.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], color='g')
plt.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], color='r')
plt.scatter(x[0], x[1], color='b')
plt.show()#计算距离
from math import sqrt
distances = []
for x_train in X_train:d = sqrt(np.sum((x_train - x)**2))distances.append(d)#distances = [sqrt(np.sum((x_train-x)**2)) for x_train in X_train]与上面for循环等价的写法nearest = np.argsort(distances)#计算距离
k = 6
nearest_k_y = [y_train[neighbor] for neighbor in nearest[:k]]
from collections import Counter
votes = Counter(nearest_k_y)
votes.most_common(1)#找出票数最多的一个元素
predict_y = votes.most_common(1)[0][0]
print(predict_y)

使用scikit-learn实现简单的KNN

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifierdata_X = np.random.rand(10, 2)
data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]X_train = data_X
y_train = np.array(data_y)x = np.array([0.7, 0.8]).reshape(1, -1)#不reshape会报错KNN_classifier = KNeighborsClassifier(n_neighbors=6)#实例化一个分类器
KNN_classifier.fit(X_train, y_train)
y_predict = KNN_classifier.predict(x)
y_predict[0]

划分训练集和验证集

当模型在验证数据集上表现得不错时,这个模型才可能是可用的。

底层实现:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasetsiris = datasets.load_iris()#载入鸢尾花数据集
print(iris.keys())X = iris.data
y = iris.target
#划分数据集
shuffled_indexes = np.random.permutation(len(X))#打乱索引
test_ratio = 0.2
test_size = int(len(X) * test_ratio)
test_indexes = shuffled_indexes[:test_size]
train_indexes = shuffled_indexes[test_size:]X_train = X[train_indexes]
y_train = y[train_indexes]X_test = X[test_indexes]
y_test = y[test_indexes]print(X_train.shape)
print(y_train.shape)print(X_test.shape)
print(y_test.shape)

使用sklearn实现:

from sklearn.model_selection import train_test_split
X_train1, X_test1, y_train1, y_test1 =  train_test_split(X, y, test_size=0.2, random_state=5)print(X_train1.shape)
print(y_train1.shape)
print(X_test1.shape)
print(y_test1.shape)

数据预处理

在机器学习领域中,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。

最值归一化:把所有数据映射到0-1之间

均值方差归一化:把所有数据归一到均值为0、方差为1的分布中

底层实现归一化:

import numpy as np
from sklearn import datasets
#最值归一化
x = np.random.randint(0, 100, 100)#生成100个数
x = (x - np.min(x)) / (np.max(x) - np.min(x))
print(x[:10])#均值方差归一化
X2 = np.random.randint(0, 100, (50, 2))#生成50行2列的数组
X2 = np.array(X2, dtype=float)
print(X2[:10,:])
X2[:,0] = (X2[:,0] - np.mean(X2[:,0])) / np.std(X2[:,0])
X2[:,1] = (X2[:,1] - np.mean(X2[:,1])) / np.std(X2[:,1])
print(X2[:10, :])

使用sklearn进行预处理:

iris = datasets.load_iris()
X = iris.data
y = iris.targetprint(x[:10, :])
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=666)from sklearn.preprocessing import StandardScaler
standardScalar = StandardScaler()
standardScalar.fit(X_train)standardScalar.mean_
standardScalar.scale_print(X_train[:10,:])#此事并未对数据进行归一化
X_train = standardScalar.transform(X_train)#归一化处理
print(X_train[:10,:])
X_train = standardScalar.transform(X_train)
print(X_train[:10,:])from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier(n_neighbors=3)
knn_clf.fit(X_train, y_train)
knn_clf.score(X_test_standard, y_test)
knn_clf.score(X_test, y_test)#错误示范,需要将归一化后测试集传入才行

补充:使用KNN解决回归问题

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasetsboston = datasets.load_boston()#导入波士顿房价数据集X = boston.data
y = boston.targetX = X[y < 50.0]
y = y[y < 50.0]from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y)
from sklearn.preprocessing import StandardScalerstandardScaler = StandardScaler()
standardScaler.fit(X_train, y_train)
X_train_standard = standardScaler.transform(X_train)
X_test_standard = standardScaler.transform(X_test)from sklearn.neighbors import KNeighborsRegressorknn_reg = KNeighborsRegressor()
knn_reg.fit(X_train_standard, y_train)
knn_reg.score(X_test_standard, y_test)

简单的线性回归

一元线性回归的原理

简而言之,我们通过拟合出一条直线以达到预测的效果。只需要找出一条直线,它预测出来的值与已知的值的误差尽可能小。

明确我们的目标

使用sklearn迅速实现简单的线性回归

import numpy as np
from sklearn import datasetsboston = datasets.load_boston()X = boston.data
y = boston.targetX = X[y<50.0]
y = y[y<50.0]from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScalerX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=6)
standardScalar = StandardScaler()
standardScalar.fit(X_train)
X_train = standardScalar.transform(X_train)
X_test_standard = standardScalar.transform(X_test)from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)lin_reg.coef_
lin_reg.intercept_
lin_reg.score(X_test_standard, y_test)

ar.fit(X_train)
X_train = standardScalar.transform(X_train)
X_test_standard = standardScalar.transform(X_test)

from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)

lin_reg.coef_
lin_reg.intercept_
lin_reg.score(X_test_standard, y_test)


软件技术部第一次机器学习培训相关推荐

  1. 软件技术部python培训

    软件技术部python培训 1.变量 1.1变量的定义 1.2查看变量的类型 2.输出 2.1简单的使用输出函数 2.2格式化输出 3.输入 3.1input()函数 3.2转换数据类型 4.运算符 ...

  2. 2021年软件技术部Linux培训

    2021年软件技术部Linux培训 什么是虚拟机 基本概念 虚拟机的功能: 什么是Linux 基本概念 不同应用领域的主流操作系统 虚拟机的创建与Linux的安装 虚拟机的创建 Linux的安装 Li ...

  3. 2020年科协第一次硬件培训总结

    2020年科协第一次硬件培训总结 物联网工程学院学生科学与技术协会第一次的硬件大培训,首先从基本的元器件出发,构建大家对电路以及基本元器件的初步认识,其次,与大家一同复习回顾了AD20的使用,针对国庆 ...

  4. 2018物联网工程学院学生科协第一次公共培训之Office培训总结

    2018物联网工程学院学生科协第一次公共培训之Office Microsoft Office是微软公司开发的一套基于 Windows 操作系统的办公软件套装.常用组件有 Word.Excel.Powe ...

  5. 软件项目第一次Sprint评分表

    软件项目第一次Sprint评分表 组名:JYJe族                                      姓名:陈杰.周雪莹.孟祥娟 1.本阶段目标是否明确? 组名 分数 原因 9 ...

  6. VC++软件工程师高端培训

    简介: C++起步到MFC实战|VC++软件工程师高端培训(服务器端开发方向),课程一共300多课时,48个G,各位码哥们赶紧下载吧,说不定过几天就找不到了 C++入门基础视频(28讲) VC++ M ...

  7. 波音正在对737 Max进行软件升级 改善飞行员培训计划

    [TechWeb]波音公司周日表示,正在为737 MAX飞机完成软件升级和飞行员培训工作.3月10日,埃塞俄比亚航空公司一架737 MAX 客机起飞后不久坠毁,机上157人全部遇难.过去五个月来,这款 ...

  8. [推荐]全球第一互动成人英语学习软件《ELLIS 英语培训系统》ISO下载

    [推荐]全球第一互动成人英语学习软件<ELLIS 英语培训系统>ISO下载 链接:http://http://space.itpub.net/?8194437 来自 " ITPU ...

  9. FLOTHERM 10.1软件热分析仿真基础培训 风冷 水冷 自冷视频教程

    FLOTHERM 10.1软件热分析仿真基础培训 风冷 水冷 自冷视频教程 链接:https://pan.baidu.com/s/1f8WkCV3ozi2PLbNkiWGgsw 提取码:02ml

最新文章

  1. Pycharm 建立工程,包含多个工程目录
  2. CF里面的资源载入问题
  3. Oracle删除表主键语句
  4. 虚拟手柄控制的小车 air3.4 Android IPones4s 下运行正常
  5. 神经网络的分类等位面
  6. 示波器到底选择多大的带宽合适
  7. Java中session的过时时间配置,session过时的优先级
  8. MySQL 全文索引实现简单版搜索引擎
  9. 阿里云成为MariaDB基金会白金会员 全球唯一入选云计算公司
  10. flask-restful 开发API
  11. 132.分割回文串II
  12. HBase学习笔记:HBase数据库介绍
  13. Spark实用议题系列(02)--- DataFrame的各种join总结和实例
  14. DayDayUp:2019.12.31罗振宇2020年跨年演讲《时间的朋友》读后有感—思维决定一个人的上限,能力决定一个人的下限
  15. 写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!
  16. 感谢上天,我被失联2年后,终于活着从东南亚菠菜公司的技术“魔窟”逃出来了......
  17. vim 匹配行首到某个特定字符
  18. mini2440一线触摸驱动代码的位置
  19. bootstrap搭建后台管理页面
  20. Labview数据存储与读取——TDMS文件的创建与写入

热门文章

  1. RFID MFRC522
  2. Linux下Socket编程之TCP应用
  3. 站长还应该发布外链吗?
  4. [tools]-excel的一些操作
  5. getchar()的作用
  6. getchar函数的用法
  7. 炒股杠杆-AI量化交易
  8. layim之修改群聊头像
  9. https是什么_http与https的区别
  10. 什么是https?http和https之间区别是什么?