# -*- coding: utf-8 -*-"""Created on Thu Jun 14 21:33:52 2018@author: wrm"""import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsiris = sns.load_dataset("iris")"""iris dataset直接就是一个pandas DataFrame,pandas是做机器学习和数据挖掘的一个十分强大的工具。可以参考Wes McKinney的那本书:https://blog.csdn.net/cf406061841/article/details/71911346""""""此处是非常著名的groupby()命令。可以按照其中的某个feature去groupby然后显示出其中的一些特征,比如均值mean(),数个数count(),以及求和sum()"""#print iris.head()#print iris.groupby("species").count()#print iris.groupby("species").mean()#print iris.groupby("species").sum()"""你也可以试一下下面的这个命令!可以帮助你理解。个人认为在pandas的基础操作里Groupby()是比较难掌握和理解的一个命令。"""#print iris.groupby("sepal_length").sum()#print iris"""在这个地方先输出iris进行测试。写代码的时候一边写一边测试是一个好习惯,反正我是这么做的。""""""在这里我们提取data和label。当然了,方法并非只有这一种。"""data = iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']].valueslabels = np.array([i//50 for i in range(iris.shape[0])])#print data#print labels"""在机器学习里我们一般是有三个集合:训练集合(用数据去训练算法),提升集合(优化算法里的参数)以及测试集合(测试你的结果)。在这个问题里我们对这一套进行简化。直接分为两个数据集合,训练集合和测试集合。其实在很多时候,在工业界我们也是利用这样的方法。在原始数据集合中分别选取一部分数据做训练,另一部分数据来做测试。在这里我们所用的方法是Cross-validation(CV,这个词在计算机科学里还有一个意思是计算机科学,computer vision).https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E9%AA%8C%E8%AF%81/8543100?fr=aladdin一般来说选取集合有两种方法,第一个是人为规定,第二个是用CV。你们要用CV,不要用人工选取集合,simply because that is clumsy."""from sklearn import cross_validation"""一般情况下所有的import都写在开头"""frac =0.4d_train, d_test, l_train, l_test= cross_validation.train_test_split(data, labels, test_size=frac, random_state=0)#print ("d_train,",d_train)#print ("l_train,",l_train)"""下面是KNN算法注意:KNN非常容易和K-means搞混,而这完全是两种不同的方法"""from sklearn import neighborsnbrs=5knn=neighbors.KNeighborsClassifier(n_neighbors=5)knn.fit(d_train, l_train)# Finally, we test our modelresult = knn.predict(d_test)print ("使用这种方法得到的准确率",knn.score(d_test,l_test))#print ("Here comes the result for KNN")#print (list(result))#print list(l_test)"""下面是SVM算法SVM适合classification,对于比较高维度的情况要用kernel!"""from sklearn import svmclf = svm.SVC(kernel='linear', C=1).fit(d_train, l_train)result = clf.predict(d_test)print ("使用这种方法得到的准确率",clf.score(d_test,l_test))"""下面是DecisionTree算法"""from sklearn import tree# Lets build our model and train it all at oncedtc = tree.DecisionTreeClassifier().fit(d_train, l_train)# Now grab the predictionsresult = dtc.predict(d_test)print("使用这种方法得到的准确率",dtc.score(d_test, l_test))"""下面是RandomForest算法"""from sklearn.ensemble import RandomForestClassifier# Lets build our model and train it all at oncerfc = RandomForestClassifier(n_estimators=10, max_depth=None,min_samples_split=2, random_state=0)rfc.fit(d_train, l_train)# Now grab the predictionsresult = rfc.predict(d_test)print("使用这种方法得到的准确率",rfc.score(d_test, l_test))"""我们可以求解一下他的cross_val_score"""svm_scores = cross_validation.cross_val_score(clf, data, labels, cv=5)rfc_scores = cross_validation.cross_val_score(rfc, data, labels, cv=10)print ("CLF CV Scores", svm_scores)print ("RFC CV Scores", rfc_scores)"""使用PCA降维方法,得到两个最重要的vector:"""from sklearn.decomposition import PCApca = PCA(n_components=2)pca.fit(data)data_reduced = pca.transform(data)#print (data_reduced)cols = ['PCA1', 'PCA2', 'Species']tmp_d = np.concatenate((data_reduced, iris['species'].reshape((150, 1))), axis=1)iris_pca = pd.DataFrame(tmp_d, columns = cols)