一直想學習機器學習,但一方面無從下手,一方面時間,精力不夠,所以沒能夠開展,今天開始我將通過《機器學習實戰》一書,逐步學習機器學習,並和大家分享這個過程
語言為python
我這邊開發使用pycharm編譯器
python版本為python2.10
需要安裝numpy庫
實質為尤拉距離,由於今天學習太累,僅將**貼出,雖然和書上的**一樣,但其中加入了很多函式的用法,可以幫助大家學習,近期將講解這些**,
專案背景
**實戰
# -*- coding: utf-8 -*-
from numpy import *
import operator
import matplotlib
import matplotlib.pyplot as plt
defcreatedataset
(): group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['a','a','b','b']
return group,labels
#分類器,核心函式
defclassify0
(inx,dataset,labels,k):
#shape會獲得矩陣的維數,是乙個元組,比如n*m的矩陣,返回的是(n,m)
datasetsize=dataset.shape[0]
#title第乙個引數是矩陣,第二個引數是乙個數字是表示對矩陣重複次數,不會增加矩陣維數,第二個引數是乙個二元組時
#二元組的第二個數,表示重複次數,不會增加矩陣維數,第乙個數表示重複多個矩陣,會增加維數
diffmat=tile(inx,(datasetsize,1))-dataset
#**表示n次冪
sqdiffmat=diffmat**2
#sum函式中axis=0表示按列求和 axis=1表示按行求和,並會降至一維
sqdistances=sqdiffmat.sum(axis=1)
distances=sqdistances**0.5
#argsort返回列表從小到大排序的索引
#eg:a=[5,10,3]
#a.argsort()
#[1,2,0]
sorteddistindicies=distances.argsort()
classcount={}
for i in range(k):
voteilabel=labels[sorteddistindicies[i]]
#字典的get(key,def)當key不存在時,返回def
classcount[voteilabel]=classcount.get(voteilabel,0)+1
#operator.itemgetter(n)獲得物件的第n個域
#sorter()第乙個引數為迭代物件,按key排序,reverse=true表示倒序排列即從大到小排列,返回的是乙個列表,裡面存放元組
sortedclasscount=sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=true)
return sortedclasscount[0][0]
#將檔案中的特徵和結果都讀取到矩陣中
deffile2matrix
(filename):
fr=open(filename)
arrayolines=fr.readlines()
numberoflines=len(arrayolines)
#zeros((n,m))函式的作用返回乙個n*m的全零矩陣
returnmat=zeros((numberoflines,3))
classlabelvector=
index=0
#dic=
for line in arrayolines:
line=line.strip()
listfromline=line.split('\t')
returnmat[index,:]=listfromline[0:3]
index+=1
return returnmat,classlabelvector
#歸一化處理
defautonorm
(dataset):
#找出當前列中的最小值
minvals=dataset.min(0)
maxvals=dataset.max(0)
ranges=maxvals-minvals
normdataset=zeros(shape(dataset))
m=dataset.shape[0]
normdataset=dataset-tile(minvals,(m,1))
normdataset=normdataset/tile(ranges,(m,1))
return normdataset,ranges,minvals
#計算分類器的錯誤率
defdatingclasstest
(): horatio=0.10
datingdatamat,datinglabels=file2matrix('h:\pythonfornumber\ch02\datingtestset2.txt')
normmat,ranges,minvals=autonorm(datingdatamat)
m=normmat.shape[0]
numtestvecs=int(m*horatio)
errorcount=0.0
for i in range(numtestvecs):
classifierresult=classify0(normmat[i,:],normmat[numtestvecs:m,:],datinglabels[numtestvecs:m],3)
print
"the classifier came back with: %d,the real answer is: %d"%(classifierresult,datinglabels[i])
if (classifierresult!=datinglabels[i]):errorcount+=1.0
print
"the total error rate is: %f" % (errorcount/float(numtestvecs))
#給定某人判定是哪類
defclassifyperson
(): resultlist=['not at all','in small doses','in large doses']
percenttats=float(raw_input("precentage of time spent playing video games"))
ffmiles=float(raw_input("frequent fliter miles earned per year?"))
icecream=float(raw_input("liters of ice cream consumed per year?"))
datingdatamat,datinglabels=file2matrix('h:\pythonfornumber\ch02\datingtestset2.txt')
normmat,ranges,minvals=autonorm(datingdatamat)
inarr=array([ffmiles,percenttats,icecream])
classifierresult=classify0((inarr-minvals)/ranges,normmat,datinglabels,3)
print
"you will probably like this person:",resultlist[classifierresult-1]
if __name__ == '__main__':
classifyperson()
# datingdatamat,classlabelvector=file2matrix('h:\pythonfornumber\ch02\datingtestset.txt')
# fig=plt.figure()
# ax=fig.add_subplot(111)
# ax.scatter(datingdatamat[:,0],datingdatamat[:,1],15.0*array(classlabelvector),15.0*array(classlabelvector))
# plt.show()
如果大家沒有這本書的話,資料資訊和原始碼請 《機器學習實戰》開篇
從今天開始,要開始練手 機器學習實戰 了。前面學了一點理論基礎,而且還做了兩個比賽,但是感覺很多東西還是無從下手,只是跑跑baseline的水平,沒有形成乙個完整的體系,所以要踏踏實實的打好基礎。光說不練假把式,光學理論是沒有用的,理論結合實踐,真正通過實戰才能學到知識,悟到真理。這本書不會原文本照...
機器學習之開篇
機器學習,本質來講,就是基於大數量的資料,尋找一種規律。然後根據找尋出的規律將未知目標值的資料確認目標值的過程。期間涉及到了資料,演算法。近幾年由於計算機硬體的公升級,大規模計算成為可能,所以機器學習又開始興起。資料是學習的 起初你拿到的是一堆陌生的資料,老闆可能給你一項任務,目標是在這一堆資料中確...
神經網路與機器學習之開篇
導 言 為了便於以後的學習,我還是穩紮穩打一步一步從基本概念和基本理論開始吧。不喜歡的求勿噴。一 從人腦神經網路到人工神經網路 人 腦 高度複雜的 非線性的和並行的計算機器 資訊處理系統 人工神經網路 由簡單處理單元構成的大規模並行分布式處理器,天然的具有儲存經驗知識和使之可用的特性 即一種自適應機...