转自:http://blog.csdn.net/sileixinhua/article/details/70477303


本项目为机器学习的学习笔记 用iris.csv作为数据集 测试了一下功能代码

实验环境:
Windows10
Sublime
Anaconda 1.6.0
Python3.6

1.条状图显示组平均数,可以从图上看出不同的花种类中,他们的属性特点。
  1. #条状图显示组平均数,可以从图上看出不同的花种类中,他们的属性特点。  
  2. import pandas as pd  
  3. from matplotlib import pyplot as plt  
  4.   
  5. iris_data=pd.read_csv("iris.csv")  
  6. #读取数据  
  7. grouped_data=iris_data.groupby("species")  
  8. #用不同的花的类别分成不同的组,此数据为三组  
  9. group_mean=grouped_data.mean()  
  10. #求组平均值  
  11. group_mean.plot(kind="bar")  
  12. plt.legend(loc="upper center",bbox_to_anchor=(0.5,1.2),ncol=2)  
  13. plt.show()  
  14. #画图  

运行结果


2.画kde图
  1. #画kde图  
  2. import pandas as pd  
  3. from matplotlib import pyplot as plt  
  4.   
  5. iris_data=pd.read_csv("iris.csv")  
  6. iris_data.plot(kind="kde",subplots=True,figsize=(10,6))  
  7. plt.show()  


运行结果


3.四种属性特征的平均值 条状图
  1. #四种属性特征的平均值 条状图  
  2. import pandas as pd  
  3. from matplotlib import pyplot as plt  
  4.   
  5. iris_data=pd.read_csv("iris.csv")  
  6. iris_mean=iris_data.mean()  
  7. iris_mean.plot(kind="bar",rot=45)  
  8. plt.show()  

运行结果


4.用numpy创建随机值,测试,与数据项目无关
  1. #用numpy创建随机值,测试,与数据项目无关  
  2. import numpy as np  
  3. from matplotlib import pyplot as plt  
  4.   
  5. n,m,s=40,160,10  
  6. data=np.random.random(n)*s+m  
  7. #print(data)  
  8. c,x,_=plt.hist(data,10)  
  9. print(c)  
  10. print(x)  
  11. plt.show()  

运行结果


5.绘制样本图
  1. #绘制样本图  
  2. import pandas as pd  
  3. from matplotlib import pyplot as plt  
  4.   
  5. iris_data=pd.read_csv("iris.csv")  
  6. for name,symbol in zip(("setosa","versicolor","virginica"),("o","s","*")):  
  7.     data=iris_data[iris_data["species"]==name]  
  8. plt.plot(data["petal_length"],data["petal_width"],symbol)  
  9. plt.show()  

运行结果


6.用sqlite3读取数据
  1. #用sqlite3读取数据  
  2. import sqlite3  
  3. con=sqlite3.connect("iris.db")  
  4.   
  5. cursor=con.execute("SELECT * FROM iris WHERE Species = 'virginica'")  
  6. for row in cursor:  
  7.     print(rwo[0],rwo[1],rwo[2],rwo[3],rwo[4])  

7.用pandas读取数据
  1. #用pandas读取数据  
  2. import pandas as pd  
  3.   
  4. iris_data=pd.read_csv("iris.csv")  
  5. print(iris_data.head(5))  

8.用原生Python读取数据
  1. #用原生Python读取数据  
  2. fp=open("iris.csv","r")  
  3. next(fp)  
  4. iris_data=[]  
  5. for line in fp:  
  6.     record = line.strip().split(".")  
  7.     iris_data.append(record)  
  8. print(iris_data[:5])  

9.用sqlalchemy 读取数据
  1. #用sqlalchemy 读取数据  
  2. import sqlalchemy  
  3.   
  4. engine=sqlalchemy.create_engine("sqlite:///iris.db")  
  5.   
  6. iris_data=pd.read_sql("SELECT * FROM iris",engine)  
  7. print(iris_data)  

10.用sklearn的交叉验证 训练数据集
  1. #用sklearn的交叉验证 训练数据集  
  2. import pandas as pd  
  3. from sklearn import cross_validation  
  4. from sklearn.neighbors import KNeighborsClassifier  
  5.   
  6. x=pd.read_csv("iris.csv")  
  7. y=x.pop("species")  
  8. x_train,x_test,y_train,y_test=cross_validation.train_test_split(x.values,y.values,test_size=0.1)  
  9.   
  10. scores=cross_validation.cross_val_score(KNeighborsClassifier(3),x,y,cv=5)  
  11. mean_score=scores.mean()  
  12. print(mean_score)  

运行结果

验证精度为0.97

11.用sklearn的KNN 训练数据集
  1. #用sklearn的KNN 训练数据集  
  2. import pandas as pd  
  3. from sklearn import cross_validation  
  4. from sklearn.neighbors import KNeighborsClassifier  
  5.   
  6. x=pd.read_csv("iris.csv")  
  7. y=x.pop("species")  
  8. x_train,x_test,y_train,y_test=cross_validation.train_test_split(x.values,y.values,test_size=0.1)  
  9.   
  10. knn=KNeighborsClassifier(3).fit(x_train,y_train)  
  11. for y_pred,y_true in zip(knn.predict(x_test),y_test):  
  12.     print(y_pred,y_true)  
  13. print(knn.score(x_test,y_test))  

运行结果

验证精度为1.0

12.用sklearn的逻辑斯蒂回归 训练数据集
  1. #用sklearn的逻辑斯蒂回归 训练数据集  
  2. import pandas as pd  
  3. from sklearn import cross_validation  
  4. from sklearn.linear_model import LogisticRegression  
  5.   
  6. x=pd.read_csv("iris.csv")  
  7. y=x.pop("species")  
  8. x_train,x_test,y_train,y_test=cross_validation.train_test_split(x.values,y.values,test_size=0.1)  
  9.   
  10. lr=LogisticRegression(multi_class="multinomial",solver="lbfgs").fit(x_train,y_train)  
  11. print(lr.predict_proba(x_test))  

运行结果

图上为预测的数据

13.用sklearn的朴素贝叶斯 训练数据集
  1. #用sklearn的朴素贝叶斯 训练数据集  
  2. import pandas as pd  
  3. from sklearn import cross_validation  
  4. from sklearn.naive_bayes import GaussianNB  
  5.   
  6. x=pd.read_csv("iris.csv")  
  7. y=x.pop("species")  
  8. x_train,x_test,y_train,y_test=cross_validation.train_test_split(x.values,y.values,test_size=0.1)  
  9.   
  10. gnb=GaussianNB().fit(x_train,y_train)  
  11. print(gnb.predict_proba(x_test))  
  12. print(gnb.class_prior_)  

运行结果

图上为预测的数据和分组的结果

14.用sklearn的交叉验证 KNN 逻辑蒂斯回归 三种方式 训练数据集 并对比
  1. #用sklearn的交叉验证 KNN 逻辑蒂斯回归 三种方式 训练数据集 并对比  
  2. import pandas as pd  
  3. from sklearn import cross_validation  
  4. from sklearn.naive_bayes import GaussianNB  
  5. from sklearn.neighbors import KNeighborsClassifier  
  6. from sklearn.linear_model import LogisticRegression  
  7.   
  8. x=pd.read_csv("iris.csv")  
  9. y=x.pop("species")  
  10. x_train,x_test,y_train,y_test=cross_validation.train_test_split(x.values,y.values,test_size=0.1)  
  11.   
  12. models={  
  13.     "knn":KNeighborsClassifier(6),  
  14.     "gnb":GaussianNB(),  
  15.     "lr":LogisticRegression(multi_class="multinomial",solver="lbfgs")  
  16. }  
  17.   
  18. for name,model in models.items():  
  19.     score=cross_validation.cross_val_score(model,x,y,cv=5).mean()  
  20.     print(name,score)  

运行结果

KNN算法的验证精度为0.98
朴素贝叶斯算法的验证精度为0.95
逻辑斯蒂回归算法的验证精度为0.97

15. 用sklearn的SVM 训练数据集
  1. import pandas as pd   
  2. from sklearn import svm,metrics,cross_validation  
  3.   
  4. iris_data=pd.read_csv("iris.csv")  
  5.   
  6. x=iris_data[["sepal_length","sepal_width","petal_length","petal_width"]]  
  7. y=iris_data["species"]  
  8.   
  9. x_train,x_test,y_train,y_test=cross_validation.train_test_split(x.values,y.values,test_size=0.1)  
  10. clf=svm.SVC()  
  11. clf.fit(x_train,y_train)  
  12. pre=clf.predict(x_test)  
  13.   
  14. score=metrics.accuracy_score(y_test,pre)  
  15. print(score)  

运行结果

验证精度为0.93

参考文献:
《统计学习方法》
Web scraping and machine learning by python

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐