数据科学代码填空与解析

文章目录

  • 线性回归与逻辑回归
    • 线性回归
    • 逻辑回归
  • 朴素贝叶斯模型
    • 例6-4-1(a) 以鸢尾花数据预分析
    • 例6-4-1(b) 鸢尾花的高斯-贝叶斯模型
    • 例6-4-1(c) 鸢尾花的高斯-贝叶斯模型性能评价
    • 例6-4-2 ROC应用举例
  • 决策树
  • K-means迭代算法

线性回归与逻辑回归

线性回归

import pandas as pd
import numpy as py
from scipy import stats
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn import metrics
#导入数据为data
data.corr(method = 'pearson')   #查看数据相关性, 越接近1或-1越线性相关
x = data[[]]                   #回归变量   x是二维array
y = data[]                     #预测变量   y是一维array
data_lreg = ______________     #创建一个类的实例LinearRegression,它将代表回归模型
data_lreg._____(x,y)                                 #拟合模型
pred_y = data_lreg._______(x)                       #预测效果
print('f(x)=',data_lreg.intercept_,'+',data_lreg.coef_[0],'x')
print('RMSE=',np.sqrt(metrics.mean_squared_error(y,pred_y)))
print('r_square=',data_lreg.______(x,y))

逻辑回归

import pandas as pd
import numpy as py
from scipy import stats
from matplotlib import pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
from sklearn.model_selection import _____________
#导入数据为data
X = data[['']]
Y = data[['']]
X_train,X_test,Y_train,Y_test = train_test_split(X,Y)
data_1reg = ________________
data_1reg.fit(X_train,Y_train)
print('分类准确率为:',data_1reg.score(X_test,Y_test))
# one-hot 编码 pd.get_dummies(需要编码的数据列, 编码后前缀)
data1_dummies = pd.get_dummies(my_data['sex'],prefix = 'sex_')

朴素贝叶斯模型

例6-4-1(a) 以鸢尾花数据预分析

import pandas as pd
import numpy as np
import _________.pyplot as plt
from ________ import stats    
from sklearn import ________
# sklearn的数据集库datasets提供很多不同的数据集,主要包含以下几大类:  1和3使用最多
# 1.玩具数据集
# 2.真实世界中的数据集
# 3.样本生成器
# 4.样本图片
# 5.svmlight或libsvm格式的数据
# 6.从http://openml.org下载的数据
# 7.从外部加载的数据

iris = datasets.__________    #导入鸢尾花数据集
plt.figure(figsize = (12,15))

# matplotlib.pyplot模块提供了一个 subplot() 函数,它可以均等地划分画布,该函数的参数格式如下:
# plt.subplot(nrows, ncols, index)
# nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。
# 如果新建的子图与现有的子图重叠,那么重叠部分的子图将会被自动删除,因为它们不可以共享绘图区域。
# 通过给画布添加 axes 对象可以实现在同一画布中插入另外的图像

# 根据指定理论分布(默认为正态分布)的分位数生成样本数据的概率图。 
# probplot 可以选择为数据计算 best-fit 线,并使用 Matplotlib 或给定的绘图函数绘制结果。
# scipy.stats.probplot(x, sparams=(), dist='norm', fit=True, plot=None, rvalue=False)
# x:probplot 从中创建绘图的样本/响应数据。
# sparams: 元组,可选;  Distribution-specific 形状参数(形状参数加上位置和比例)。
# dist: str 或 stats.distributions 实例,可选;  分布或分布函数名称。对于正态概率图,默认值为 ‘norm’。
# fit: 布尔型,可选;  如果为真(默认),则将 least-squares 回归 (best-fit) 线拟合到样本数据。
# plot: 对象,可选; 这matplotlib.pyplot可以使用模块或 Matplotlib Axes 对象,或具有相同方法的自定义对象。默认为无,这意味着不创建绘图。

for n in range(4):
    for m in range(3):
        x = (iris.data[m*50 : m*50 + 50,n] - iris.data[m*50 : m*50 + 50,n].mean())/iris.data[m*50 : m*50 + 50,n].std()
        plt.______(4,3,n*3 + m + 1)
        stats._________(x,dist = 'norm',plot = plt)
        
        plt.text(-2,2,iris.feature_names[n])    #文字说明
        if n == 0:
            plt.title(iris.target_names[n])
        else:
            plt.title('')
        
        plt.xlim([-2.5,2.5])
        plt.ylim([-2.5,2.5])
        plt.plot([-2.5,2.5],[-2.5,2.5],c ='g')

例6-4-1(b) 鸢尾花的高斯-贝叶斯模型

from sklearn._________ import train_test_split
from sklearn.naive_bayes import ________

my_data = iris.data[:,:2]
X_train,X_test,Y_train,Y_test = ___________(my_data, iris.target, test_size = 0.2, random_state = 0)

# train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train_data和test_data,形式为:
# X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)
# train_data:所要划分的样本特征集
# train_target:所要划分的样本结果
# test_size:样本占比,如果是整数的话就是样本的数量
# random_state:是随机数的种子。
# 随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
# 随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
# 种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。

clf = ___________				# 建模,探索建模结果
clf._____(X_train,Y_train)
y_pred = clf.________(X_test)			#查看预测结果

Y = pd.DataFrame(np._______([Y_test,y_pred]),columns = {'true_type','predict_type'})
Y.head(10)

# numpy.transpose(arr, axes)
# transpose: 反转或排列数组的轴; 返回修改后的数组;对于具有两个轴的数组a,transpose(a)给出矩阵转置.
# arr:要操作的数组
# axes(可选):整数或列表(如果指定参数,则它必须是包含所有索引的重排列; 如果不指定,则默认为反转索引的顺序)

例6-4-1© 鸢尾花的高斯-贝叶斯模型性能评价

# 混淆矩阵(confusion_matrix)也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。
# 其每一列代表预测值,每一行代表的是实际的类别。
# 在人工智能中,混淆矩阵(confusion_matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵(matching matrix)
# 在图像精度评价中,主要用于比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。
# 混淆矩阵是通过将每个实测像元的位置和分类与分类图像中的相应位置和分类相比较计算的。
# sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)
# y_true: 是样本真实分类结果  矩阵列
# y_pred: 是样本预测分类结果  矩阵行
# labels:是所给出的类别,通过这个可对类别进行选择
# sample_weight : 样本权重

# sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)
# 函数用于显示主要分类指标的文本报告,其参数:
# y_true: 类别的真实标签值,类标签的列表
# y_pred: 预测值的标签,类标签的列表
# labels: 报告中要包含的标签索引的可选列表;这个参数一般不需要设置
    # (如果要设置,比如200个类别,那么就应该如此设置:lable= range(200); 然后在sklearn.metrics.classification_report中将labels=label)
    # 可是有的时候不设置就会出错,之所以会出错是因为:比如你总共的类别为200个类,但是,你的测试集中真实标签包含的类别只有199个,有一个类别缺失数据,如果不设置这个参数就会报错;
# target_name: 与标签匹配的名称,就是一个字符串列表,在报告中显示;也即是显示与labels对应的名称
# sample_weight:设置权重的参数,一般不用,需要就可以用;
# digits:这个参数是用来设置你要输出的格式位数,就是几位有效数字吧,大概就是这个意思,即指定输出格式的精确度;
# output_dict:我一般不用,好像没啥用;如果为True,则将输出作为dict返回

from sklearn.metrics import _________
print(confusion_matrix(Y_test,y_pred))
from sklearn.metrics import _______________
print(classification_report(Y_test,y_pred))

例6-4-2 ROC应用举例

# sklearn.metrics.roc_auc_score(y_true, y_score, *, average='macro', sample_weight=None, max_fpr=None, multi_class='raise', labels=None)
# y_true:真实的标签
# y_score:目标分数
# 用于多分类:(自行了解)
# average='macro':二分类时,该参数可以忽略。
#         ' micro ':将标签指标矩阵的每个元素看作一个标签,计算全局的指标。
#         ' macro ':计算每个标签的指标,并找到它们的未加权平均值。这并没有考虑标签的不平衡。
#         ' weighted ':计算每个标签的指标,并找到它们的平均值,根据支持度(每个标签的真实实例的数量)进行加权。
# sample_weight=None:样本权重,默认=无。
# max_fpr=None:
# multi_class='raise'
# labels=None

from sklearn.metrics import roc_curve
from sklearn.metrics import _________
my_auc = []
for n in range(4):
    my_auc.append(__________(iris.target[:100], iris.data[:100,n]))
    #fpr,tpr,th = roc_curve(iris.target[:100],iris.data[:n])

print('4个参数的ROC_AUC是',my_auc)
plt.plot(np.ones([50,1]), iris.data[:50,0],'or')
plt.plot(np.ones([50,1]) + 0.2, iris.data[50:100,0],'*g')

plt.plot(np.ones([50,1]) + 1, iris.data[:50,1],'or')
plt.plot(np.ones([50,1]) + 1.2, iris.data[50:100,1],'*g')

plt.plot(np.ones([50,1]) + 2, iris.data[:50,2],'or')
plt.plot(np.ones([50,1]) + 2.2, iris.data[50:100,2],'*g')

plt.plot(np.ones([50,1]) + 3, iris.data[:50,3],'or')
plt.plot(np.ones([50,1]) + 3.2, iris.data[50:100,3],'*g')

plt.xticks([1,2,3,4],iris._______)
plt._______(iris.target_names[:2])

# matplotlib.pyplot.xticks(ticks=None, labels=None, **kwargs)
# 用于获取和设置x轴的当前刻度位置和标签
# ticks:此参数是xtick位置的列表。和一个可选参数。如果将一个空列表作为参数传递,则它将删除所有xticks
# labels:此参数包含放置在给定刻度线位置的标签。它是一个可选参数。
# **kwargs:此参数是文本属性,用于控制标签的外观。

# matplotlib.pyplot.legend([“blue”, “green”], bbox_to_anchor=(0.75, 1.15), ncol=2)
# legend()函数的属性:
# loc的默认值为loc =“ best”(左上方)。字符串“左上方”,“右上方”,“左下方”,“右下方”将图例放置在轴/图形的相应角上。
# bbox_to_anchor =(x,y)用于指定图例的坐标,属性ncol表示图例具有的列数。默认值为1。
# shadow:[None or bool]是否在图例后面绘制阴影。默认值为“无”。
# markerscale:[无,整数或浮点型]图例标记与原始绘制标记的相对大小。默认值为无。
# numpoints:[无或整数]为Line2D(线)创建图例条目时,图例中标记点的数量。默认值为无。
# fontsize:图例的字体大小。如果值为数字,则该大小将是绝对字体大小(以磅为单位)。
# facecolor:[无,或“inherit”或颜色]图例的背景颜色。
# edgecolor:[无,或“inherit”或颜色]图例的背景色块边颜色。


决策树

import pandas as pd
import numpy as np
from sklearn import tree
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import ________________

X = data[[]]
Y = data[]
#random_state:控制随机状态,固定random_state后,每次构建的模型是相同的、生成的数据集是相同的、每次的拆分结果也是相同的。
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, __________ = 22, test_size = 0.2)
my_tree = DecisionTreeClassifier(max_depth = 3)
my_tree.fit(X_train,Y_train)
print('分类结果为:',my_tree._______(X_test),'\n')
print('平均准确率为:',my_tree._______(X_test,Y_test))

pd.DataFrame({'feature':X.columns,'importance':my_tree.feature_importances_})

#绘制决策树
plt.figure(figsize = ( , ))
tree.plot_tree(my_tree,fontsize = 12,feature_names = X.columns,class_names = ['Good','Bad'])
plt.________('my_tree')


K-means迭代算法

import numpy as np
import pandas as pd
from scipy import stats
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans

X = my_data[['budget','popularity','revenue']]
km = KMeans(n_clusters = 3,random_state = 1)    # n_cluster:分类簇的数量; random_state:随机数生成的种子
km.fit(X)
my_cl = pd.DataFrame(data = km.labels_ ,columns = ['cluster'])
X = pd.______([X,my_cl],axis = 1)

X.________('cluster').mean() 
x = X['budget']
y = X['popularity']
z = X['revenue']
colors = list()    #颜色字典列表
palette = {0:"red",1:"green",2:"blue"}
for n ,row in _________(X['cluster']):
    colors.append(palette[X['cluster'][n]])
    
fig = plt.figure(figsize = (12,10))
ax = fig.____(projection = '3d')
ax.______(x,y,z,color = colors)
ax.set_xlim(0,2e8)
ax.set_zlim(0,1e9)
ax.set_xlabel('budget',size = 15)
ax.set_ylabel('popularity',size = 15)
ax.set_zlabel('revenue',size = 15)

你可能感兴趣的:(数据科学导论,python,matplotlib)