赞
踩
笔记来源于系统学习以下课程:
B站最完整系统的Python数据分析-数据挖掘教程,72小时带你快速入门,轻松转行(月入10W+数据分析师强烈推荐!)
算法内容跳过~~
算法的优点:
算法的缺点:
示例代码:
from sklearn import datasets # sklearn的数据库 from sklearn.neighbors import KNeighborsClassifier # sklearn模板的KNN类 import numpy as np # 矩阵运算库 np.random.seed(0) # 设置随机种子,不设置的话默认是按系统实践作为参数,设置后可以保证我们每次产生的随机数是一样的 iris = datasets.load_iris() # 获取鸢尾花数据集 iris_x = iris.data # 数据部分 iris_y = iris.target # 类别部分 # 从150条数据中选140条作为训练集,10条作为测试集。permutation接收一个数作为参数(这里为数据集长度150),产生一个0-149乱序一维数组 randomarr = np.random.permutation(len(iris_x)) iris_x_train = iris_x[randomarr[:-10]] # 训练集数据 iris_y_train = iris_y[randomarr[:-10]] # 训练集数据 iris_x_test = iris_x[randomarr[-10:]] # 测试集数据 iris_y_text = iris_y[randomarr[-10:]] # 测试集数据 # 定义一个KNN分类器对象 knn = KNeighborsClassifier() # 调用该对象的训练方法,主要接收两个参数:训练数据集及其类别标签 knn.fit(iris_x_train, iris_y_train) # 调用预测方法,主要接收一个参数:测试数据集 iris_y_predict = knn.predict(iris_x_test) # 计算各测试样本预测的概率值,这里我们没有使用概率值,但是在实际工作中可能会参考概率值来进行最后结果的筛选,而不是直接使用给出的标签数据集 probility = knn.predict_proba(iris_x_test) # 计算与最后一个测试样本距离最近的5个点,返回的是这些样本的序号组成的数组 score = knn.score(iris_x_test, iris_y_text, sample_weight=None) # 输出测试的结果 print('iris_y_predict=') print(iris_y_predict) # 输出原始测试数据集的正确标签,以方便对比 print('iris_y_text') print(iris_y_text) # 输出准确率结果 print('Accuracy:',score)
代码运行结果:
iris_y_predict=
[1 2 1 0 0 0 2 1 2 0]
iris_y_text
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.9
算法内容跳过~~
算法的优点:
算法的缺点:
示例代码:
from sklearn import datasets # sklearn的数据库 from sklearn.tree import DecisionTreeClassifier # 引入决策树算法包 import numpy as np # 引入相关画图的包 from IPython.display import Image from sklearn import tree # dot是一个程式化生成流程图的简单语言 import pydotplus np.random.seed(0) iris = datasets.load_iris() iris_x = iris.data iris_y = iris.target indices = np.random.permutation(len(iris_x)) iris_x_train = iris_x[indices[:-10]] iris_y_train = iris_y[indices[:-10]] iris_x_test = iris_x[indices[-10:]] iris_y_text = iris_y[indices[-10:]] # 设置树的最大深度为4 clf = DecisionTreeClassifier(max_depth=4) clf.fit(iris_x_train, iris_y_train) # 可视化 dot_data = tree.export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data) Image(graph.create_png()) # 预测 iris_y_predict = clf.predict(iris_x_test) score = clf.score(iris_x_test, iris_y_text, sample_weight=None) print('iris_y_predict=') print(iris_y_predict) print('iris_y_test') print(iris_y_text) print('Accuracy:', score)
这里代码有个坑:pydotplus.graphviz.InvocationException: GraphViz’s executables not found
可参考:可视化模块GraphViz’s executables not found报错解决
代码运行结果:
iris_y_predict=
[1 2 1 0 0 0 2 1 2 0]
iris_y_test
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.9
扩展内容:
算法内容跳过~~
算法的优点:
算法的缺点:
示例代码:
from sklearn import datasets # sklearn的数据库 from sklearn.naive_bayes import GaussianNB # 高斯分布型贝叶斯 import numpy as np np.random.seed(0) iris = datasets.load_iris() iris_x = iris.data iris_y = iris.target indices = np.random.permutation(len(iris_x)) iris_x_train = iris_x[indices[:-10]] iris_y_train = iris_y[indices[:-10]] iris_x_test = iris_x[indices[-10:]] iris_y_text = iris_y[indices[-10:]] clf = GaussianNB() # 构造朴素贝叶斯分类器 clf.fit(iris_x_train, iris_y_train) # 拟合 # 预测 iris_y_predict = clf.predict(iris_x_test) score = clf.score(iris_x_test, iris_y_text, sample_weight=None) print('iris_y_predict=') print(iris_y_predict) print('iris_y_test') print(iris_y_text) print('Accuracy:', score)
代码运行结果:
iris_y_predict=
[1 2 1 0 0 0 2 1 2 0]
iris_y_test
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.9
扩展内容:
算法内容跳过~~
算法的优点:
算法的缺点:
示例代码:
from sklearn import datasets from sklearn import svm import numpy as np np.random.seed(0) iris = datasets.load_iris() iris_x = iris.data iris_y = iris.target indices = np.random.permutation(len(iris_x)) iris_x_train = iris_x[indices[:-10]] iris_y_train = iris_y[indices[:-10]] iris_x_test = iris_x[indices[-10:]] iris_y_text = iris_y[indices[-10:]] # 模型 clf = svm.SVC(kernel='linear') clf.fit(iris_x_train, iris_y_train) # 拟合 # 预测 iris_y_predict = clf.predict(iris_x_test) score = clf.score(iris_x_test, iris_y_text, sample_weight=None) print('iris_y_predict=') print(iris_y_predict) print('iris_y_test') print(iris_y_text) print('Accuracy:', score)
代码运行结果:
iris_y_predict=
[1 2 1 0 0 0 2 1 2 0]
iris_y_test
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.9
算法内容跳过~~
算法的优点:
算法的缺点:
示例代码:
from sklearn import datasets from sklearn.neural_network import MLPClassifier import numpy as np np.random.seed(0) iris = datasets.load_iris() iris_x = iris.data iris_y = iris.target indices = np.random.permutation(len(iris_x)) iris_x_train = iris_x[indices[:-10]] iris_y_train = iris_y[indices[:-10]] iris_x_test = iris_x[indices[-10:]] iris_y_text = iris_y[indices[-10:]] # 模型 clf = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(5, 2), random_state=1) clf.fit(iris_x_train, iris_y_train) # 拟合 # 预测 iris_y_predict = clf.predict(iris_x_test) score = clf.score(iris_x_test, iris_y_text, sample_weight=None) print('iris_y_predict=') print(iris_y_predict) print('iris_y_test') print(iris_y_text) print('Accuracy:', score) print('layer nums:',clf.n_layers_)
代码运行结果:
iris_y_predict=
[2 2 2 2 2 2 2 2 2 2]
iris_y_test
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.2
layer nums: 4
扩展内容:
XGB算法是由决策树衍生出来的一种算法。
要求:
酒店的业务人员希望我们能够提供一个算法服务去为酒店信息做一个自动化匹配,以通过算法的手段,找到那些确定相同的酒店和确定不同的酒店
下面按照完整的数据挖掘的步骤进行:
1. 理解业务
2. 理解数据
3. 准备数据与模型训练
、
4. 模型训练与评估
算法内容跳过~~
算法的优点:
算法的缺点:
示例代码:
from sklearn import datasets from sklearn.cluster import KMeans import matplotlib.pyplot as plt import numpy as np """ 画出聚类后的图像 labels:聚类后的label,从0开始的数字 cents:质心坐标 n_cluster:聚类后簇的数量 color:每一簇的颜色 """ def draw_result(train_x, labels, cents, title): n_cluster = np.unique(labels).shape[0] color = ["red", "orange", "yellow"] plt.figure() plt.title(title) for i in range(n_cluster): current_data = train_x[labels == i] plt.scatter(current_data[:, 0], current_data[:, 1], c=color[i]) plt.scatter(cents[i, 0], cents[i, 1], c="blue", marker="*", s=100) return plt if __name__ == '__main__': iris = datasets.load_iris() iris_x = iris.data clf = KMeans(n_clusters=3, max_iter=10, n_init=10, init="k-means++", algorithm="full", tol=1e-4, n_jobs=-1, random_state=1) clf.fit(iris_x) print("SSE={0}".format(clf.inertia_)) draw_result(iris_x, clf.labels_, clf.cluster_centers_, "kmeans").show()
代码运行结果:
SSE=78.851441426146
扩展内容:
算法内容跳过~~
算法的优点:
算法的缺点:
示例代码:
from sklearn import datasets from sklearn.cluster import dbscan import matplotlib.pyplot as plt import pandas as pd import numpy as np # 生成500个噪声点 噪声为0.1 X, _ = datasets.make_moons(500, noise=0.1, random_state=1) df = pd.DataFrame(X, columns=['x', 'y']) df.plot.scatter('x', 'y', s=200, alpha=0.5, c="green", title='dataset by DBSCAN') plt.show() # eps为邻域半径,min_samples为最少样本量 core_samples, cluster_ids = dbscan(X, eps=0.2, min_samples=20) # cluster_ids中-1表示对应的点为噪声 df = pd.DataFrame(np.c_[X, cluster_ids], columns=['x', 'y', 'cluster_id']) df['cluster_id'] = df['cluster_id'].astype('i2') # 绘制结果图像 df.plot.scatter('x', 'y', s=200, c=list(df['cluster_id']), cmap='Reds', colorbar=False, alpha=0.6, title='DBSCAN cluster result') plt.show()
代码运行结果:
扩展内容:
Word2Vec算法:可以学习输入的文本,并输出一个词向量模型
下面按照完整的数据挖掘的步骤进行:
1. 理解业务
2. 理解数据
3.准备数据
4.训练Word2Vec模型
算法内容跳过~~
算法的优点:
算法的缺点:
示例代码:
import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split import numpy as np def generateData(): X = [] y = [] for i in range(0, 100): tem_x = [] tem_x.append(i) X.append(tem_x) tem_y = [] tem_y.append(i + 2.128 + np.random.uniform(-15, 15)) y.append(tem_y) plt.scatter(X, y, alpha=0.6) plt.show() return X, y if __name__ == '__main__': np.random.seed(0) X, y = generateData() print(len(X)) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) regressor = LinearRegression() regressor.fit(X_train, y_train) y_result = regressor.predict(X_test) plt.plot(X_test, y_result, color='red', alpha=0.6, linewidth=3, label='Predicted Line') plt.show()
代码运行结果:
100
1. 需求理解、数据理解、数据获取、模型训练
波士顿房价数据集是一个非常常用的公开数据集。
下载两个文件:housing.data是所有的数据、housing.name记录了对数据的介绍
示例代码:
from sklearn.datasets import load_boston import pandas as pd from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt from sklearn import metrics import numpy as np from sklearn.linear_model import LinearRegression boston = load_boston() X = boston.data y = boston.target df = pd.DataFrame(X, columns=boston.feature_names) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 模型训练 regressor = LinearRegression() regressor.fit(X_train, y_train) # 查看截距 print(regressor.intercept_) # 查看斜率 coeff_df = pd.DataFrame(regressor.coef_, df.columns, columns=['Coefficient']) print(coeff_df) y_pred = regressor.predict(X_test) test_df = pd.DataFrame({'Actual': y_test.flatten(), 'Predicted': y_pred.flatten()}) print(test_df) test_df1 = test_df.head(25) test_df1.plot(kind='bar', figsize=(16, 10)) plt.grid(which='major', linestyle='-', linewidth=0.5, color='green') plt.grid(which='minor', linestyle=':', linewidth=0.5, color='black') plt.show()
代码运行结果:
38.091694926302125 Coefficient CRIM -0.119443 ZN 0.044780 INDUS 0.005485 CHAS 2.340804 NOX -16.123604 RM 3.708709 AGE -0.003121 DIS -1.386397 RAD 0.244178 TAX -0.010990 PTRATIO -1.045921 B 0.008110 LSTAT -0.492793 Actual Predicted 0 22.6 24.889638 1 50.0 23.721411 2 23.0 29.364999 3 8.3 12.122386 4 21.2 21.443823 .. ... ... 97 24.7 25.442171 98 14.1 15.571783 99 18.7 17.937195 100 28.1 25.305888 101 19.8 22.373233 [102 rows x 2 columns]
评估:
示例代码:
print('MeanAbsolute Error:', metrics.mean_absolute_error(y_test, y_pred))
print('Mean_squared Error:', metrics.mean_squared_error(y_test, y_pred))
print('RootMean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
评估结果:
MeanAbsolute Error: 3.842909220444496
Mean_squared Error: 33.448979997676474
RootMean Squared Error: 5.78350931508513
关联分析是一种无监督学习,目标是从大数据中找出那些经常一起出现的东西。
Apriori算法的核心:如果某个项集是频繁项集,那么其全部子集也都是频繁项集。
算法原理:
方法论:
示例代码:
from efficient_apriori import apriori
data = [('尿布', '啤酒', '奶粉', '洋葱'),
('尿布', '啤酒', '奶粉', '洋葱'),
('尿布', '啤酒', '苹果', '洋葱'),
('尿布', '啤酒', '苹果'),
('尿布', '啤酒', '奶粉'),
('尿布', '啤酒', '奶粉'),
('尿布', '啤酒', '苹果'),
('尿布', '啤酒', '苹果'),
('尿布', '奶粉', '洋葱'),
('奶粉', '洋葱')]
itemsets,rules = apriori(data,min_support=0.4,min_confidence=1)
print(itemsets)
代码运行结果:
{1: {('尿布',): 9, ('啤酒',): 8, ('奶粉',): 6, ('洋葱',): 5, ('苹果',): 4}, 2: {('啤酒', '奶粉'): 4, ('啤酒', '尿布'): 8, ('啤酒', '苹果'): 4, ('奶粉', '尿布'): 5, ('奶粉', '洋葱'): 4, ('尿布', '洋葱'): 4, ('尿布', '苹果'): 4}, 3: {('啤酒', '奶粉', '尿布'): 4, ('啤酒', '尿布', '苹果'): 4}}
总结:
Apriori算法:使用的穷举的当时
FP-Growth算法:使用了树形结构来提高速度
不管是使用什么算法来挖掘的关联关系,都可以使用关联关系的评估指标来进行评估
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。