常见数据挖掘算法和Python简单实现
2017-04-21 11:15
573 查看
1、K近邻算法
原理:计算待分类样本与每个训练样本的距离,取距离最小的K个样本,这k个样本,哪个类别占大多数,则该样本属于这个类别。
优点:1、无需训练和估计参数,2、适合多分类,3、适合样本容量比较大的问题
缺点:1、对测试样本内存开销大,2、可解释性差,无法生成规则,3、对样本量小的问题,容易误分
经验:K一般低于样本量的平方根,基于交叉验证
问题:类别判断:投票法没有考虑距离的远近,可以采用加权投票‘’
高维度变量:维度越高,欧氏距离的区分能力越差。
import numpy as np
from sklearn import neighbors
knn = neighbors.KNeighborsClassifier()
knn.fit(x,y)
knn.predict()
2、决策树
原理:以树的结构递归的选择特征,并根据特征对样本进行分割,获得子树结构的过程。
优点:1、速度快,容易形成规则,2、准确度高,易于理解;3、可以处理连续和分类字段,4、不需要参数假设和任何领域知识,5、适合高维数据
缺点:1、对于各类别样本数量不一致数据,信息增益偏向于数值更多的特征,2、易于过拟合,3、忽略关性
ID3:使用信息增益作为特征选择的度量,1、当分类不均匀时,分类精度大打折扣;2、不能处理连续数据和带缺失值数据
import numpy as np
from sklearn import tree
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import classification_report
from sklearn.cross_validation import train_test_split
data = np.array([[1.5 ,50,'thin'], [1.5 ,60, 'fat'] ,[1.6 ,40 ,'thin'], [1.6 ,60, 'fat'] ,[1.7 ,60 ,'thin'], [1.7 ,80 ,'fat'] ,[1.8 ,60 ,'thin'],[1.8 ,90 ,'fat'], [1.9 ,70 ,'thin'],[1.9 ,80, 'fat']])
labels = data[:,-1]
y = np.zeros(labels.shape)
y[labels=='fat']=1
y[labels=='thin']=0
x = data[:,:2]
x_train,x_test,y_train,y_test = train_test_split(x,y, test_size=0.2,random_state=0)
clf=tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(x_train, y_train)
with open("tree.dot", 'w') as f:
f = tree.export_graphviz(clf, out_file=f)
print (clf.feature_importances_)
precision, recall, thresholds = precision_recall_curve(y_train,clf.predict(x_train))
answer = clf.predict_proba(x)[:,1]
print(classification_report(y,answer,target_names = ['thin', 'fat']))
3、朴素贝叶斯
原理:对于待分类的项目, 求解此项出现的条件下各类别出现的概率,那个最大,此待分类项就属于哪个类别。
优点:分类速度快,对缺失值不敏感,准确度高
缺点:需要知道先验概率
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(x, y )
model.predict()
4、Logistic回归
原理:面对一个回归或者分类函数,建立一个代价函数,通过迭代法求解出最优模型参数。
优点:速度快。适合二分类问题;直接看到各个特征的权重,能更容易更新模型吸收新的数据。
缺点:对数据和场景的适应能力不强。
过拟合问题往源自 过多的特征
解决方法 1)减少特征数量(减少特征会失去一些信息,即使特征选的很好) 可用人工选择要保留的特征; 模型选择算法;
2)正则化(特征较多时比较有效) 保留所有特征,但减少θ的大小
5、支持向量机
原理:通过最大化分类分界点到分类界面距离来实现分类。
优点:提高泛化性能,解决小样本下机器学习的问题,避免神经昂神经网络选择和局部极小的问题。
缺点:对缺失数据敏感,内存消耗大,难解释。
SVM和逻辑回归区别:
从目标函数看,逻辑回归采用logistical loss ,SVM采用hinge loss。
逻辑回归是参数模型,SVM是非参数模型。
6、Adaboost
集成学习:1、boosting是同一种机器学习算法,数据抽取时,裙权值在不断更新,每次提高前一次分错了的数据集的权值,最后得到T个弱分类器,且分类器的权值跟中间结果的数据有关;
bagging:同一种弱分类器,数据抽取通过有放回抽样(bootstrap);
stacking算法:第一层行程T个弱分类器,生成相同的新数据及,利用这个数据集和新算法构成第二层分类器。
adaboost算法:是一种迭代算法,针对同一个训练集训练不同的分类器,然后把分类器集合起来,构成一个更强的分类器。关注被错分的样本,器重好的分类器
优点:不担心过拟合问题,不用做特征筛选,可以用各种方法构造分类器。
from sklearn.ensemble import GradientBoostingcClassifier
model=GradientBoostingClassifier(n_estimators=100,learning_rate=1.0,max_depth=1,random_state=0)
model.fit()
7、K-均值聚类
优点:当聚类是密集的,且类与类之间区别明显时,效果较好;对于处理大数据及,这个算法相对高校,计算复杂度为O(NKT),N是数据量, K 是聚类中心, T是迭代的次数。
from sklearn.clster import KMeans
clf = KMeans(n_clusters=3,max_iter=300,n_init=10)
8、PCA
原理:通过线性投影,将高维空间映射到低维空间,所投影维度上数据的方差最大。
注意:使用pca可以提取主成分,肯能会解决一些过拟合问题,但不建议使用降维解决过拟合,建议加个正则化项来解决。
只有源数据结果较好,但嫌他太慢采用主成分分析。
from sklearn.decomposition import PCA
import numpy as np
import pandas as pd
data = np.random.randn(10,4)
pca = PCA()
pca.fit(data)
print (pca.components_)
print (pca.explained_variance_ratio_)
pca = PCA(3)
pca.fit(data)
lowd = pca.transform(data)
pd.DataFrame(lowd).to_excel("E:/contest_data/result.xlsx")
pca.inverse_transform(lowd)
10.apriori关联分析
原理:计算待分类样本与每个训练样本的距离,取距离最小的K个样本,这k个样本,哪个类别占大多数,则该样本属于这个类别。
优点:1、无需训练和估计参数,2、适合多分类,3、适合样本容量比较大的问题
缺点:1、对测试样本内存开销大,2、可解释性差,无法生成规则,3、对样本量小的问题,容易误分
经验:K一般低于样本量的平方根,基于交叉验证
问题:类别判断:投票法没有考虑距离的远近,可以采用加权投票‘’
高维度变量:维度越高,欧氏距离的区分能力越差。
import numpy as np
from sklearn import neighbors
knn = neighbors.KNeighborsClassifier()
knn.fit(x,y)
knn.predict()
2、决策树
原理:以树的结构递归的选择特征,并根据特征对样本进行分割,获得子树结构的过程。
优点:1、速度快,容易形成规则,2、准确度高,易于理解;3、可以处理连续和分类字段,4、不需要参数假设和任何领域知识,5、适合高维数据
缺点:1、对于各类别样本数量不一致数据,信息增益偏向于数值更多的特征,2、易于过拟合,3、忽略关性
ID3:使用信息增益作为特征选择的度量,1、当分类不均匀时,分类精度大打折扣;2、不能处理连续数据和带缺失值数据
import numpy as np
from sklearn import tree
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import classification_report
from sklearn.cross_validation import train_test_split
data = np.array([[1.5 ,50,'thin'], [1.5 ,60, 'fat'] ,[1.6 ,40 ,'thin'], [1.6 ,60, 'fat'] ,[1.7 ,60 ,'thin'], [1.7 ,80 ,'fat'] ,[1.8 ,60 ,'thin'],[1.8 ,90 ,'fat'], [1.9 ,70 ,'thin'],[1.9 ,80, 'fat']])
labels = data[:,-1]
y = np.zeros(labels.shape)
y[labels=='fat']=1
y[labels=='thin']=0
x = data[:,:2]
x_train,x_test,y_train,y_test = train_test_split(x,y, test_size=0.2,random_state=0)
clf=tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(x_train, y_train)
with open("tree.dot", 'w') as f:
f = tree.export_graphviz(clf, out_file=f)
print (clf.feature_importances_)
precision, recall, thresholds = precision_recall_curve(y_train,clf.predict(x_train))
answer = clf.predict_proba(x)[:,1]
print(classification_report(y,answer,target_names = ['thin', 'fat']))
3、朴素贝叶斯
原理:对于待分类的项目, 求解此项出现的条件下各类别出现的概率,那个最大,此待分类项就属于哪个类别。
优点:分类速度快,对缺失值不敏感,准确度高
缺点:需要知道先验概率
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(x, y )
model.predict()
4、Logistic回归
原理:面对一个回归或者分类函数,建立一个代价函数,通过迭代法求解出最优模型参数。
优点:速度快。适合二分类问题;直接看到各个特征的权重,能更容易更新模型吸收新的数据。
缺点:对数据和场景的适应能力不强。
过拟合问题往源自 过多的特征
解决方法 1)减少特征数量(减少特征会失去一些信息,即使特征选的很好) 可用人工选择要保留的特征; 模型选择算法;
2)正则化(特征较多时比较有效) 保留所有特征,但减少θ的大小
5、支持向量机
原理:通过最大化分类分界点到分类界面距离来实现分类。
优点:提高泛化性能,解决小样本下机器学习的问题,避免神经昂神经网络选择和局部极小的问题。
缺点:对缺失数据敏感,内存消耗大,难解释。
SVM和逻辑回归区别:
从目标函数看,逻辑回归采用logistical loss ,SVM采用hinge loss。
逻辑回归是参数模型,SVM是非参数模型。
6、Adaboost
集成学习:1、boosting是同一种机器学习算法,数据抽取时,裙权值在不断更新,每次提高前一次分错了的数据集的权值,最后得到T个弱分类器,且分类器的权值跟中间结果的数据有关;
bagging:同一种弱分类器,数据抽取通过有放回抽样(bootstrap);
stacking算法:第一层行程T个弱分类器,生成相同的新数据及,利用这个数据集和新算法构成第二层分类器。
adaboost算法:是一种迭代算法,针对同一个训练集训练不同的分类器,然后把分类器集合起来,构成一个更强的分类器。关注被错分的样本,器重好的分类器
优点:不担心过拟合问题,不用做特征筛选,可以用各种方法构造分类器。
from sklearn.ensemble import GradientBoostingcClassifier
model=GradientBoostingClassifier(n_estimators=100,learning_rate=1.0,max_depth=1,random_state=0)
model.fit()
7、K-均值聚类
优点:当聚类是密集的,且类与类之间区别明显时,效果较好;对于处理大数据及,这个算法相对高校,计算复杂度为O(NKT),N是数据量, K 是聚类中心, T是迭代的次数。
from sklearn.clster import KMeans
clf = KMeans(n_clusters=3,max_iter=300,n_init=10)
8、PCA
原理:通过线性投影,将高维空间映射到低维空间,所投影维度上数据的方差最大。
注意:使用pca可以提取主成分,肯能会解决一些过拟合问题,但不建议使用降维解决过拟合,建议加个正则化项来解决。
只有源数据结果较好,但嫌他太慢采用主成分分析。
from sklearn.decomposition import PCA
import numpy as np
import pandas as pd
data = np.random.randn(10,4)
pca = PCA()
pca.fit(data)
print (pca.components_)
print (pca.explained_variance_ratio_)
pca = PCA(3)
pca.fit(data)
lowd = pca.transform(data)
pd.DataFrame(lowd).to_excel("E:/contest_data/result.xlsx")
pca.inverse_transform(lowd)
10.apriori关联分析
相关文章推荐
- 一种常见的数据挖掘的算法SPRINT算法的简单实现
- 小白学数据:教你用Python实现简单监督学习算法
- Python数据挖掘07--KNN算法理论与实现
- 数据挖掘之决策树归纳算法的Python实现
- 数据挖掘之Apriori算法详解和Python实现代码分享
- 数据挖掘(Python)——利用sklearn进行数据挖掘,实现算法:svm、knn、C5.0、NaiveBayes
- 数据挖掘之Apriori算法详解和Python实现代码分享
- 数据挖掘之Apriori算法的Python实现
- python数据挖掘实践第一章 KNN算法,以及算法的实现
- 机器学习与数据挖掘系列算法之--knn的python实现
- 数据挖掘 --- Python实现KNN算法项目 - 水果分类
- 数据挖掘 --- Python实现KNN算法项目-约会推荐算法
- 机器学习与数据挖掘-K最近邻(KNN)算法的实现(java和python版)
- 数据挖掘10大算法(6)-K最近邻(KNN)算法的实现(java和python版)
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- 数据挖掘常用算法及实现(http://bbs.chinakdd.com/forum.php?mod=viewthread&tid=4055&extra=page%3D1)
- 数据挖掘-聚类分析:k-平均(k-Means)算法实现(C++)
- 数据结构与算法——基数排序简单Java实现
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)