python实现机器学习分类算法源码
文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍
1.KNN分类算法
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)
2.Logistic算法
注意:逻辑回归算法本质上还是一种线性模型,筛选出来的变量与结果有线性关系,但剔除的变量只是与结果大概率上无线性关系,但未必无非线性关系。
代码:
#-*- 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
(未完待续)
下篇博文介绍:
3.Bayesian Linear Regression
不能够一次性接收到整个数据集,而是不断接收到小的数据集,同时由于存储的限制不能存储已经接收到的所有数据集,每次可以处理的小的数据集。这就导致不能对所有数据做线性回归,但是可以通过贝叶斯线性回归达到同样的效果。贝叶斯回归算法可以预防过拟合
https://www.cnblogs.com/hemiy/p/6194710.html
4.决策树
5.人工神经网络
6.SVM
加油吧,程序员!