机器学习笔记(一)

一、三种类型的机器学习

1 有监督学习是指有标签的数据,直接反馈,以及预测结果/未来
有监督学习的主要目标是从有标签的训练数据中学习模型,以便对未知或未来的数据进行预测。“监督“是指已知样本所需要的输出或者数据标签。

具体可分为分类(离散数据),回归(连续数据),有监督学习中事先知道正确的答案。

2 无监督学习是指无标签(目标)的数据,无反馈,需要寻找数据中隐藏的结构。

处理的是无标签结构未知的数据。eg:聚类分析,降维(特征预处理)

3 强化学习是指决策过程,奖励机制以及学习一系列的行动。

强化学习的目标是开发系统或代理,通过它们与环境的交互来提高其预测性能。当前的环境状态信息包含所谓的奖励机制。强化学习涉及即时或延时反馈来最大化奖励*。定义了代理对特定动作的奖励。*

二、数据预处理

由于某些选定的特征可能是高度相关的,因此可以对其进行降维处理,降低特征空间维数的优点是减少存储空间,提高算法的运行速度。

三、最简单的感知器模型

使用UCI中的鸢尾花的数据进行的分类。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
"""python定义一个感知器的类,用python实现最简单的分类"""
class Perceptron(object):
    """Perceptron classifier
    变量:
    eta:float,代表学习率,参考范围0.0~1.0;
    n-iter:int  传递训练数据集,训练次数
    random_state:int  随机产生权重初始化
    属性:
    w_:ld-array,权重矩阵
    errors_:list(列表)
    """
    def __init__(self, eta=0.01, n_iter=50, random_state=1):
        self.eta = eta
        self.n_iter = n_iter
        self.random_state = random_state
    def fit(self, X, Y):
        """
        将所有的数据分为训练数据X和测试数据Y,
        X=[样本,特征],y=[样本]。
        return:self(obejct)
        """
        rgen = np.random.RandomState(self.random_state)## numpy中的随机数生成器
        self.w_ = rgen.normal(loc=0.0, scale=0.01, size=1+X.shape[1]) ##产生标准差为0.01的标准正态分布
        self.errors_ = []
        for _ in range(self.n_iter):
            errors = 0
            for xi, target in zip(X, Y):
                update = self.eta * (target - self.predict(xi))
                self.w_[1:] += update * xi
                self.w_[0] +=update
                errors +=int(update !=0.0)
            self.errors_.append(errors)
        return self
    def net_input(self,X):
        """"该函数用于计算网络的输入"""
        return np.dot(X, self.w_[1:] + self.w_[0]) ##就是计算x*w'+b
    def predict(self,X):
        """返回每部的分类标签
        根据计算所得的结果判断 其是否大于0,若大于0返回1,否则返回-1
        """
        return np.where(self.net_input(X) >= 0.0, 1, -1)
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
                 header=None)
df.tail()
## 选出两种鸢尾花的数据,并将一种的值设为-1,另一种为1
Y = df.iloc[0:100, 4].values
Y = np.where(Y == 'Iris-setosa', -1, 1)
# 提取特征值为X
X = df.iloc[0:100, [0, 2]].values
plt.scatter(X[:50, 0], X[:50, 1], color='red', marker='o', label='山鸢尾')
plt.scatter(X[50:, 0], X[50:, 1], color='blue', marker='x', label='变色鸢尾')
plt.xlabel('sepal length [cm]')
plt.ylabel('petal length [cm]')
plt.legend(loc='upper left')
plt.draw()
## 开始使用感知器模型进行分类
ppn = Perceptron(eta=0.01,  n_iter=10)
ppn.fit(X,Y)
plt.plot(range(1,len(ppn.errors_)+1), ppn.errors_, marker='o')
plt.xlabel('Epochs')
plt.ylabel('Number of updates')
plt.show()

参考文献:《python机器学习》前两章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值