数据挖掘可视化+机器学习初探

简介: 数据挖掘可视化+机器学习初探

以下可视化的数据来源为名为“”的Excel文件,它有六列,分别是IdSepalLengthCmSepalWidthCmPetalLengthCmPetalWidthCmSpecies。基于这个数据表,进行数据处理和可视化操作:

一、散点图

散点图是指在 回归分析 中,数据点在直角坐标系平面上的 分布图 ,散点图表示因变量随 自变量 而 变化 的大致趋势,据此可以选择合适的函数 对数 据点进行 拟合 。 用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

代码如下:

1. import pandas as pd
2. import matplotlib.pyplot as plt
3. plt.rcParams['font.sans-serif']=['SimHei']
4. plt.rcParams['axes.unicode_minus']=False
5. df = pd.read_csv("iris.csv")
6. SepalLengthCm = df["SepalLengthCm"]
7. SepalWidthCm = df["SepalWidthCm"]
8. PetalLengthCm = df["PetalLengthCm"]
9. PetalWidthCm = df["PetalWidthCm"]
10. x = [i for i in range(1,len(PetalWidthCm)+1)]
11. color = ['c', 'b', 'g', 'r', 'm', 'y', 'k', 'w']
12. def func(label,num,name):
13.     plt.scatter(x,label, c=color[num], edgecolors='r')
14.     plt.title(f"{name}散点图")
15.     plt.savefig(f"{name}散点图.png")
16.     plt.show()
17. 
18. func(SepalLengthCm,0,"SepalLengthCm")
19. func(SepalWidthCm,1,"SepalWidthCm")
20. func(PetalLengthCm,2,"PetalLengthCm")
21. func(PetalWidthCm,3,"PetalWidthCm")

效果如下:

二、热力图

热力图是一种特殊的图表,它是一种通过对色块着色来显示数据的统计图表,在绘图时,需要指定每个颜色映射的规则(一般以颜色的强度或色调为标准);比如颜色越深的表示数值越大、程度越深;颜色越亮的数值越大、程度越深。 热力图适合用于查看总体的情况、观察特殊值或者显示多个变量之间的差异性、检测它们之间是否存在相关性等等。

代码如下:

1. import pandas as pd
2. import seaborn as sns
3. import matplotlib.pyplot as plt
4. plt.rcParams['font.sans-serif']=['SimHei']
5. plt.rcParams['axes.unicode_minus']=False
6. data = pd.read_csv('iris.csv',usecols=["SepalLengthCm","SepalWidthCm","PetalLengthCm","PetalWidthCm"])
7. df = pd.DataFrame(data)
8. cor = data.corr(method='pearson')
9. sns.heatmap(cor,
10.             annot=True,  # 显示相关系数的数据
11.             center=0.5,  # 居中
12.             fmt='.2f',  # 只显示两位小数
13.             linewidth=0.5,  # 设置每个单元格的距离
14.             linecolor='blue',  # 设置间距线的颜色
15.             vmin=0, vmax=1,  # 设置数值最小值和最大值
16.             xticklabels=True, yticklabels=True,  # 显示x轴和y轴
17.             square=True,  # 每个方格都是正方形
18.             cbar=True,  # 绘制颜色条
19.             cmap='coolwarm_r',  # 设置热力图颜色
20.             )
21. plt.title("四列属性热力图")
22. plt.savefig("四列属性热力图.png",dpi=600)#保存图片,分辨率为600
23. plt.show() #显示图片

效果如下:

三、回归分析图

统计学中,回归分析(regression analysis)指的确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 回归分析按照涉及的变量的多少,分为一元回归和 多元回归分析 ;按照因变量的多少,可分为简单回归分析和多重回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和 非线性回归分析 。

代码如下:

1. from sklearn.model_selection import train_test_split
2. from sklearn.linear_model import LinearRegression
3. import pandas as pd
4. import matplotlib.pyplot as plt
5. import numpy as np
6. 
7. plt.rcParams['font.sans-serif']=['SimHei']
8. plt.rcParams['axes.unicode_minus']=False
9. df = pd.read_csv("iris.csv")
10. Species = df["Species"]
11. PetalLengthCm = df["PetalLengthCm"]
12. PetalWidthCm = df["PetalWidthCm"]
13. PetalLengthCm_Iris_setosa = df.loc[df["Species"]=="Iris-setosa",["PetalLengthCm"]]
14. PetalLengthCm_Iris_versicolor = df.loc[df["Species"]=="Iris-versicolor",["PetalLengthCm"]]
15. PetalLengthCm_Iris_virginica = df.loc[df["Species"]=="Iris-virginica",["PetalLengthCm"]]
16. PetalWidthCm_Iris_setosa = df.loc[df["Species"]=="Iris-setosa",["PetalWidthCm"]]
17. PetalWidthCm_Iris_versicolor = df.loc[df["Species"]=="Iris-versicolor",["PetalWidthCm"]]
18. PetalWidthCm_Iris_virginica = df.loc[df["Species"]=="Iris-virginica",["PetalWidthCm"]]
19. pd_data = pd.read_csv("iris.csv")  # 可用read_csv导入数据
20. 
21. def func(type_A,type_B,color,all_type):
22. # 划分x,y
23.     exam_X = type_A
24.     exam_Y = type_B
25. # 将原数据集拆分训练集和测试集
26.     X_train, X_test, Y_train, Y_test = train_test_split(exam_X, exam_Y, train_size=.8)
27.     model = LinearRegression()  # 线性回归模型
28.     model.fit(X_train, Y_train)  # 模型的成员函数fit(X,y)以数组X和y为输入
29.     a = model.intercept_  # 截距   判断是否有截据,如果没有则直线过原点
30.     b = model.coef_  # 回归系数   模型的成员变量,存储线性模型的系数
31. # 训练数据预测值
32.     y_train_pred = model.predict(X_train)  # 预测
33.     score = model.score(X_test, Y_test)  # 可决系数   返回对于以X为samples,以y为target的预测效果评分
34. # 绘制最佳拟合线:标签用的是训练数据的预测值y_train_pred
35.     plt.plot(X_train, y_train_pred, color='black', linewidth=3)
36. # 测试数据散点图
37.     plt.scatter(X_test, Y_test, color=color)
38.     plt.scatter(X_train, Y_train, color=color, label=all_type)
39. # 添加图标标签
40.     plt.legend(loc=2)
41. 
42. def run():
43.     func(PetalLengthCm_Iris_setosa,PetalWidthCm_Iris_setosa,'green',"Iris-setosa")
44.     func(PetalLengthCm_Iris_versicolor,PetalWidthCm_Iris_versicolor,"red","Iris-versicolor")
45.     func(PetalLengthCm_Iris_virginica,PetalWidthCm_Iris_virginica,"blue","Iris-virginica")
46.     plt.gcf().set_facecolor(np.ones(3) * 240 / 255)  # 生成画布的大小
47.     plt.grid()  # 生成网格
48.     plt.xlabel("PetalLengthCm")
49.     plt.ylabel("PetalWidthCm")
50.     plt.title("PetalLengthCm与PetalWidthCm回归分析图")
51.     plt.savefig("PetalLengthCm与PetalWidthCm回归分析图.png")
52.     plt.show()
53. run()

效果如下:

四、 K-means聚类分析图

k均值聚类算法(k-means clustering algorithm)是一种 迭代 求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。

代码如下:

1. import numpy as np
2. import matplotlib.pyplot as plt  
3. from sklearn.cluster import KMeans 
4. from sklearn.preprocessing import StandardScaler
5. import pandas as pd
6. plt.rcParams['font.sans-serif']=['SimHei']
7. plt.rcParams['axes.unicode_minus']=False
8. df = pd.read_csv("iris.csv")
9. Species = df["Species"]
10. PetalLengthCm = df["PetalLengthCm"]
11. PetalWidthCm = df["PetalWidthCm"]
12. fin_list = []
13. for i in range(0,len(PetalWidthCm)):
14.     fin_list.append([PetalLengthCm[i],PetalWidthCm[i]])
15. n_samples = len(PetalWidthCm)
16. X = np.array(fin_list)
17. X = StandardScaler().fit_transform(X)  #标准化
18. Kmeans=KMeans(n_clusters=3,random_state=170)
19. Kmeans.fit(X)
20. plt.figure(figsize=(8,6))
21. plt.scatter(X[:,0],X[:,1],c=Kmeans.labels_)
22. plt.title("K-means聚类分析数据图")
23. plt.savefig("K-means聚类分析数据图.png")
24. plt.show()

效果如下:

五、决策树分类图

分类树(决策树)是一种十分常用的分类方法。 它是一种监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。 这样的机器学习就被称之为监督学习

代码如下:

1. import pandas as pd
2. import numpy as np
3. import matplotlib.pyplot as plt
4. from sklearn.model_selection import train_test_split
5. from sklearn.tree import DecisionTreeClassifier
6. from mlxtend.plotting import plot_decision_regions
7. plt.rcParams['font.sans-serif']=['SimHei']
8. plt.rcParams['axes.unicode_minus']=False
9. df = pd.read_csv("iris.csv")
10. Species = df["Species"]
11. PetalLengthCm = df["PetalLengthCm"]
12. PetalWidthCm = df["PetalWidthCm"]
13. fin_list = []
14. label_list = []
15. for i in range(0,len(PetalWidthCm)):
16.     fin_list.append([PetalLengthCm[i],PetalWidthCm[i]])
17. n_samples = len(PetalWidthCm)
18. X = np.array(fin_list)
19. for i in range(0,len(PetalWidthCm)):
20. if Species[i] == "Iris-setosa":
21.         label_list.append(0)
22. elif Species[i] == "Iris-versicolor":
23.         label_list.append(1)
24. else:
25.         label_list.append(2)
26. y = np.array(label_list)
27. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)
28. clf_tree = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=1)
29. clf_tree.fit(X_train, y_train)
30. X_combined = np.vstack((X_train, X_test))
31. y_combined = np.hstack((y_train, y_test))
32. fig, ax = plt.subplots(figsize=(6, 6))
33. plot_decision_regions(X_combined, y_combined, clf=clf_tree)
34. plt.legend(loc='upper left')
35. plt.title("决策树分类器绘制分类结果")
36. plt.tight_layout()
37. plt.savefig("决策树分类器绘制分类结果.png")
38. plt.show()

效果如下:

六、总结

①绘制四列属性SepalWidth、SepalLength、PetalWidth以及PetalLength的散点图:

  1. 绘制散点图第一想法是用plt.scatter来绘制,以SepalWidth为例:x为1-len(SepalWidth)+1的序列,y即为SepalWidth每个值。
  2. 因为这里要绘出四个属性的散点图,所以这里定义了一个函数func,参数为label:为四个属性;num:作为color列表的索引,使每个图都有不同的颜色,更加美观也便于区别;name:属性的名称,在最后出图的时候作为标题和图标的名称。
  3. 用pandas库将文件读取出来,再分别读取四个属性所在的列,因为四个属性的长度都是一样的,所以这里只需要定义一个x序列,再定义一个color列表。
  4. 函数func封装代码,起到画散点图的作用,最后再传入不同的实参,绘制四列属性SepalWidth、SepalLength、PetalWidth以及PetalLength的散点图。

②绘制四列属性SepalWidth、SepalLength、PetalWidth以及PetalLength的热力图:

  1. 绘制热力图,要求相关系数,想到用seaborn里面的sns.heatmap,需要设置相关系数的计算方法、位置、是否显示数字、颜色、最大最小值、方框形状等参数。
  2. 在读取数据时,ID列和标签列不能读入,所以这里用pd.read_csv时要限制读取列:data=pd.read_csv('iris.csv',usecols=["SepalLengthCm","SepalWidthCm","PetalLengthCm","PetalWidthCm"])
  3. 将数据用corr函数计算后,传入sns.heatmap中,最后加上标题保存后将图片显示出来。

③选取相关系数较大的属性进行回归分析:

  1. 由第二问可知,PetalLengthCm和PetalWidthCm相关系数最大,为0.96,故要对这两列数据进行回归分析。
  2. 由参考图可知,需要分类别进行回归分析,即Iris-setosa、Iris-versicolor、Iris-virginica三个属性要分别进行回归分析,这就要求在读取文件后,对数据进行预处理。用df.loc可以 指定列读取指定内容,例如:PetalLengthCm_Iris_setosa = df.loc[df["Species"]=="Iris-setosa",["PetalLengthCm"]]。
  3. 因为三个属性都要回归分析,所以这里再一次运用的函数封装的思想,定义func可以画出一个回归分析的图,再利用函数run,调用三次func函数,在一个图中将三次的回归分析表现出来。
  4. 函数func是利用数据集训练线性回归模型,首先将原数据集拆分训练集和测试集,定义一个线性回归模型,模型的成员函数fit(X,y)以数组X和y为输入,再判断是否有截据,如果没有则直线过原点,计算相关系数,并绘制最佳拟合曲线并绘制散点图。
  5. 函数run是调用三次func函数,每一次向其中传入不同的实参,达到绘制三个列表的回归分析图。
  6. 最后生成画布和王哥,使结果更加直观。添加标签和坐标、标题等元素,将图片保存后显示出来。

④绘制K-means聚类分析的结果:

  1. Kmeans聚类主要用的是sklearn.cluster里面的Kmeas,将两列数据读取进来,通过for循环转化为list嵌套列表,再通过np.array转化为矩阵,在进行一次标准化。
  2. Kmeans聚类,我这里n_clusters=3,即聚成三类,每一类用不同的颜色标注出来,最后加上标题,保存并显示出来。

⑤训练决策树分类器,绘制分类结果:

  1. 决策树分类主要用的是sklearn.model_selection里面的train_test_split函数以及sklearn.tree里面的DecisionTreeClassifier。
  2. 首先是数据预处理,读取文件,读取指定列,将PetalLengthCm与PetalWidthCm关联起来,存到一个嵌套列表中,用np.array转化为矩阵。通过类别添加标签0、1、2。用for循环遍历Species中的每一个值,用if语句进行判断,为其添加标签,便于训练决策树模型。
  3. 划分训练集、测试集:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)。
  4. 再进行决策树模型的训练:clf_tree = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=1)、plot_decision_regions(X_combined, y_combined, clf=clf_tree)。
  5. 最终将图例、标题等提示性信息添加到图表上,保存图片到本地,并将最终结果显示出来。


相关文章
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
150 4
|
1月前
|
机器学习/深度学习 数据可视化 JavaScript
探索机器学习模型的可视化技术
【9月更文挑战第23天】在数据科学中,理解和解释机器学习模型的决策过程是至关重要的。本文将介绍几种流行的可视化工具和库,如TensorBoard、D3.js等,帮助读者更好地理解模型内部工作原理及其预测结果。通过实例演示如何使用这些工具进行模型可视化,增强模型的可解释性。
|
1月前
|
机器学习/深度学习 数据采集 算法
数据挖掘和机器学习算法
数据挖掘和机器学习算法
|
2月前
|
机器学习/深度学习 存储 人工智能
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
本文是关于2022-2023年知能科技公司机器学习算法工程师岗位的秋招笔试题,包括简答题和编程题,简答题涉及神经网络防止过拟合的方法、ReLU激活函数的使用原因以及条件概率计算,编程题包括路径行走时间计算和两车相向而行相遇时间问题。
67 2
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于python 机器学习算法的二手房房价可视化和预测系统
文章介绍了一个基于Python机器学习算法的二手房房价可视化和预测系统,涵盖了爬虫数据采集、数据处理分析、机器学习预测以及Flask Web部署等模块。
基于python 机器学习算法的二手房房价可视化和预测系统
|
2月前
|
机器学习/深度学习 人工智能 算法
【数据挖掘】2022年2023届秋招奇虎360机器学习算法工程师 笔试题
本文提供了奇虎360公司2022年秋招机器学习算法工程师岗位的笔试题内容,包括选择题和编程题,涉及概率统计、数据结构、机器学习、计算机组成原理等多个领域。
88 5
|
2月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】2022年2023届秋招宏瓴科技公司机器学习算法工程师 笔试题
关于宏瓴科技有限公司2022-2023年秋招机器学习算法工程师岗位的笔试题目及作者个人对部分题目的解答尝试,涉及贝叶斯误差和贝叶斯最优分类器的概念、贝叶斯误差的重要性和估算方法,以及如何有效利用训练集和测试集进行深度学习模型训练的数据集划分策略。
51 4
|
2月前
|
机器学习/深度学习 数据可视化 搜索推荐
【python机器学习】python电商数据K-Means聚类分析可视化(源码+数据集+报告)【独一无二】
【python机器学习】python电商数据K-Means聚类分析可视化(源码+数据集+报告)【独一无二】
103 0