python實現機器學習分類演算法原始碼 上篇

2021-08-28 16:33:05 字數 3154 閱讀 8045

knn演算法不僅可以用於分類,還可以用於回歸。通過找出乙個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。

注意:knn演算法不適用於樣本量不均衡的情況。

python實現**:

/*normdata函式來執行標準化資料集的工作,防止因不同量之間資料本身範圍不同而統一化分析的誤差保證標準化後每乙個特徵值都在0~1之間*/

def normdata(dataset):

maxvals = dataset.max(axis=0)

minvals = dataset.min(axis=0)

ranges = maxvals - minvals

retdata = (dataset - minvals) / ranges

return retdata, ranges, minvals

//knn演算法實現

def knn(dataset, labels, testdata, k):

distsquaremat = (dataset - testdata) ** 2 # 計算差值的平方

distsquaresums = distsquaremat.sum(axis=1) # 求每一行的差值平方和

distances = distsquaresums ** 0.5 # 開根號,得出每個樣本到測試點的距離

sortedindices = distances.argsort() # 排序,得到排序後的下標

indices = sortedindices[:k] # 取最小的k個

labelcount = {} # 儲存每個label的出現次數

for i in indices:

label = labels[i]

labelcount[label] = labelcount.get(label, 0) + 1 # 次數加一

sortedcount = sorted(labelcount.items(), key=opt.itemgetter(1), reverse=true)

# 對label出現的次數從大到小進行排序

return sortedcount[0][0] # 返回出現次數最大的label

//測試函式

if __name__ == "__main__":

dataset = np.array([[2, 3], [6, 8]])

normdataset, ranges, minvals = normdata(dataset)

labels = ['a', 'b']

testdata = np.array([3.9, 5.5])

normtestdata = (testdata - minvals) / ranges

result = knn(normdataset, labels, normtestdata, 1)

print(result)

//結果為a,正確

使用knn演算法: 

import numpy as np

import matplotlib.pyplot as plt

from sklearn import neighbors,datasets,cross_validation

def test_kneighborsregressor(*data):

x_train,x_test,y_train,y_test=data

regr=neighbors.kneighborsregressor()

regr.fit(x_train,y_train)

print('training score:%f'%regr.score(x_train,y_train))

print('testing score:%f'%regr.score(x_test,y_test))

x_train,x_test,y_train,y_test=create_regression_data(1000)

test_kneighborsregressor(x_train,x_test,y_train,y_test)

注意:邏輯回歸演算法本質上還是一種線性模型,篩選出來的變數與結果有線性關係,但剔除的變數只是與結果大概率上無線性關係,但未必無非線性關係。 

**:

#-*- coding: utf-8 -*-

#邏輯回歸 自動建模

import pandas as pd

#引數初始化

filename = '../data/bankloan.xls'

data = pd.read_excel(filename)

x = data.iloc[:,:8].as_matrix()

y = data.iloc[:,8].as_matrix()

from sklearn.linear_model import logisticregression as lr

from sklearn.linear_model import randomizedlogisticregression as rlr

rlr = rlr() #建立隨機邏輯回歸模型,篩選變數

rlr.fit(x, y) #訓練模型

rlr.get_support() #獲取特徵篩選結果,也可以通過.scores_方法獲取各個特徵的分數

print(u'通過隨機邏輯回歸模型篩選特徵結束。')

print(u'有效特徵為:%s' % ','.join(data.columns[rlr.get_support()]))

x = data[data.columns[rlr.get_support()]].as_matrix() #篩選好特徵

lr = lr() #建立邏輯回歸模型

lr.fit(x, y) #用篩選後的特徵資料來訓練模型

print(u'邏輯回歸模型訓練結束。')

print(u'模型的平均正確率為:%s' % lr.score(x, y))

邏輯回歸模型訓練結束。

模型的平均正確率為:0.805714285714

不能夠一次性接收到整個資料集,而是不斷接收到小的資料集,同時由於儲存的限制不能儲存已經接收到的所有資料集,每次可以處理的小的資料集。這就導致不能對所有資料做線性回歸,但是可以通過貝葉斯線性回歸達到同樣的效果。貝葉斯回歸演算法可以預防過擬合

加油吧,程式設計師!

機器學習之整合學習(二)Bagging分類演算法實現

儲存決策樹模型的陣列 n trees 20 設定樹的顆數 for i in range n trees tmp df.sample frac 1,replace true 對樣本進行取樣,目的是建造不同的樹 x tmp.iloc 1 構造x y tmp.iloc 1 構造y model decisi...

機器學習python分類演算法

from pandas import read csv from sklearn.linear model import linearregression from sklearn.linear model import logisticregression from sklearn.model s...

Machine Learning 機器學習演算法

機器學習演算法分類 監督學習 半監督學習 無監督學習 強化學習 基本的機器學習演算法 線性回歸 支援向量機 svm 最近鄰居 knn 邏輯回歸 決策樹 k平均 隨機森林 樸素貝葉斯 降維 梯度增強 機器學習演算法大致可以分為 監督學習演算法基於一組示例進行 在監督學習訓練過程中,可以由訓練資料集學到...