赞
踩
1、内置的鸢尾花数据集(已经清洗过的了)
# 导入数据,用数据框查看
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris["data"], columns=iris.feature_names) #iris["data"]也可以写成iris.data
df["class"] = iris.target
df.head()
# 取得我们需要的数据
X = iris["data"]
y = iris["target"]
# 数据可视化-1(花瓣长度和宽度散点图)
%matplotlib inline
import matplotlib.pyplot as plt
plt.scatter(X[:,2], X[:,3], c=y)
# 数据可视化-2
import matplotlib.pyplot as plt
import seaborn as sns
sns.pairplot(df, hue="class")
# 对数据进行统计
df.groupby(by="class").count()
-------------------------------------------------我是正常的分割线---------------------------------------------
对iris数据集进行分类机器学习
# 引入第三方库 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier #最近邻算法(KNN) from sklearn.linear_model import LogisticRegression #逻辑斯蒂可回归算法 #1、 KNN # 读入数据集 iris = load_iris() X, y = iris.data, iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=20) # 选择机器学习算法生成模型 # 1、KNN算法 #生成算法 knn = KNeighborsClassifier(n_neighbors=7) #算法学习训练集 knn.fit(X_train, y_train) print(knn) # 预测 y_pred = knn.predict(X_test) print("预测: ",y_pred) print("实际: ",y_test) print("KNN算法的准确度: {}".format(knn.score(X_train, y_train))) print("KNN算法的准确度: {}".format(knn.score(X_test, y_test))) #过拟合和欠拟合 # #预测未知的数据,随意给了几个数据测试 # import numpy as np # knn.predict(np.array([5.2, 1.4, 2.5, 1.2]).reshape(1,-1)) print("------------------------两种算法的分割线----------------------------") #2、 逻辑回归分类 #生成算法 lr = LogisticRegression(C=2) #算法学习 lr.fit(X_train, y_train) print(lr) #打印后可以观察调整上方的参数 # 预测 y_pred = lr.predict(X_test) print("预测: ",y_pred) print("实际: ",y_test) print("逻辑回归算法的准确度: {}".format(lr.score(X_train, y_train))) print("逻辑回归算法的准确度: {}".format(lr.score(X_test, y_test))) #过拟合和欠拟合
-------------------------------------------------我是开心的分割线---------------------------------------------
2、有噪声的鸢尾花数据集
数据清洗
# 读入数据
import pandas as pd
iris = pd.read_csv("data/iris-data.csv")
iris.head()
# 观察数据
iris.info()
iris.describe() #描述数值型数据有多少个(count)
观察得出:
# 绘图观察数据
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
sns.pairplot(iris.dropna(), hue = "class") #sns.pairplot一次性画出两两图,dropna是去掉缺失值
观察发现:
# 解决标注的类别错误
# pandas里的切片(loc和iloc,loc根据名字来,iloc是根据序号)
iris.loc[iris["class"]=="Iris-setossa","class"] = "Iris-setosa"#行和列,条件放在行里
iris.loc[iris["class"]=="versicolor","class"] = "Iris-versicolor" #找到错误数据并改正
iris["class"].unique()
# 再次绘图观察类别情况(解决类别的问题了)
sns.pairplot(iris.dropna(), hue = "class")
# 解决花瓣长度最小值异常的问题
# 观察数据基本位于4-8之间,看看是否有小于1的数据
iris.loc[iris["sepal_length_cm"]<1,]
iris.loc[iris["sepal_length_cm"]<1,"sepal_length_cm"] *= 100
# 再次绘图观察(发现最左边和最下边黄色的异常值没有了)
sns.pairplot(iris.dropna(), hue = "class")
#解决花萼宽度的缺失值问题
# 首先观察缺失值
iris.info()
iris.loc[iris["petal_width_cm"].isnull(),] #打印出空的行
缺失值的解决方案有很多方法,根据实际情况选用:
#--- 采用均值填充缺失值
# 计算Iris-setosa类别的花萼宽度列的平均值
avg = iris.loc[iris["class"]=="Iris-setosa","petal_width_cm"].mean()
# 用均值填充相应的缺失值
iris.loc[iris["petal_width_cm"].isnull(),"petal_width_cm"] = round(avg, 1)
# 再次观察数据,基本没有问题
iris.info() #有没有缺失值
iris.describe() #有没有异常
# 将清洗好的数据保存到文件
iris.to_csv("data/iris-data-clean2.csv", index=False) #去掉index索引
-------------------------------------------------我是忙碌的分割线---------------------------------------------
3、机器学习过程(决策树算法)
# 引入第三方库 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier #决策树算法 # 读入数据 iris = pd.read_csv("data/iris-data-clean2.csv") iris.head() # 从数据框中获取数据和目标(X和y) #(X是前四列的数据,第五列是目标,也就是y,是可以用字符串的) #X = iris.iloc[:,0:4] 这个得到的是数据框(包括表头,然后我们不要表头,只要中间的数据) X = iris.iloc[:,0:4].values y = iris.iloc[:,-1].values #划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) #选择机器学习算法建立模型(决策树) dtc = DecisionTreeClassifier() #模型学习 dtc.fit(X_train, y_train) print(dtc) #模型评估 print("决策树算法的准确度:", dtc.score(X_test, y_test)) #模型分类评估报告 from sklearn.metrics import classification_report y_pred = dtc.predict(X_test) print(classification_report(y_test, y_pred)) #实际的结果和预测的结果 # precision是准确率,也就是预测是该类的全部都对了,但是漏了几个预测称其他类了->recall是召回率,白血病案例中召回率很重要;因为类别极度不平均 # f1-score是结合准确率和召回率的,调和平均数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。