机器学习笔记(一)

本文为博主学习机器学习时所做的笔记以及实验的代码,学习内容来自heimachengxuyuan.如有错误请多指教。

基础内容

概念

机器学习是通过一系列的变量来获取预测下一时间的值,输入称作feature(特征值),结果为label(结果标签),其中映射关系或者函数叫做算法,我们的主要问题就是通过编程来实现这个算法。

影响预测的因素

1、预测模型的参数不够好(调参)
2、影响因子不够多(增加数据维度)
3、样本数据量不够多(增加样本量)
4、预测模型选的不够好(更换模型)

基本算法

Knn模型基础理解

使用python的numpy库,以及collection库实现。例子:投掷弹子玩具,当你投掷一个弹子时,会落入不同的奖品池子,我们想要预测投掷位置为200(feature)时的会获得的奖品时,则先随机投掷一系列的弹子,获得奖品结果(标签值),再计算这些弹子位置距离200的大小(distance),再根据distance从小到大排序,获得距离200接近时的最大概率奖品,示意代码如下:

import numpy as np
import collections as c
data =np.array([
    [154, 1],
    [126, 2],
    [70, 2],
    [196, 2],
    [161, 2],
    [371, 4]
])
#输入值
feature = data[:, 0]
#结果label
label = data[:, -1]
#预测点位置
predictPoint = 200
#计算随机实验距离
distance = (list(map(lambda x: abs(predictPoint-x), feature)))
print(distance)
#返回从小到大排序的下标的位置
sortindex = (np.argsort(distance))
#返回最接近的结果的排序
sortlabel = (label[sortindex])
#k个最接近的邻居
k = 3
print(c.Counter(sortlabel[0:k]).most_common(1)[0][0])

获得结果为

[46, 74, 130, 4, 39, 171]
2

封装knn函数

代码如下

import numpy as np
import collections as c


#抽取knn函数

def knn(k, predictPiont, feature, label):
    # 计算随机实验距离
    distance = (list(map(lambda x: abs(predictPiont - x), feature)))
    # 返回从小到大排序的序列的下标位置
    sortindex = (np.argsort(distance))
    # 返回最接近结果的排序
    sortlabel = (label[sortindex])
    # 返回k个最接近的邻居
    return (c.Counter(sortlabel[0:k]).most_common(1)[0][0])

if __name__ == '__main__':
    data = np.array([
        [154, 1],
        [126, 2],
        [70, 2],
        [196, 2],
        [161, 2],
        [371, 4]
    ])
    # 输入值
    feature = data[:, 0]
    # 结果label
    label = data[:, -1]
    # 预测点位置
    predictPiont = 200
    k = 3
    print(knn(k, predictPiont, feature, label))

通过numpy倒入csv文件

import numpy as np
data = np.loadtxt("data0.csv", delimiter=",")

评估模型准确性

训练数据集(trainData)和测试数据集(testData)

#处理数据,把数据充分打散,拆分成测试集与训练集
import numpy as np
#将原始数据导入并赋值给data
data = np.loadtxt("data0.csv", delimiter=",")
#打散原始数据
np.random.shuffle(data)

testData = data[0:100]

trainData = data[100:-1]
#保存测试数据
np.savetxt("data0_test.csv", testData, delimiter=",", fmt="%d")
#保存训练数据
np.savetxt("data0_train.csv", trainData, delimiter=",", fmt="%d")

训练与评估

将k设置为3时代码如

 traindata = np.loadtxt("data0_train.csv",delimiter=",")
    # 输入值
    feature = traindata[:, 0]
    # 结果label
    label = traindata[:, -1]
    # 预测点位置
    testdata = np.loadtxt("data0_test.csv", delimiter=",")
    for item in testdata:
        predict = knn(3,item[0],feature,label)
        real = item[1]
        count = 0
        if real ==predict;
        count = count+1
    print("准确率为{}%".format(count*100.0/len(testdata)))

不断改变k的值,写一个循环函数可得不同k值的准确率比较,选择最优k。当数据分布比较均匀且数据量较大时,前人的经验告诉我们,k值可取数据量大小的开平方为最优值。

未完待续。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值