Q1:上四分位数,Q2:中四分位数,Q3:下四分位数
a:上四分位位置,b:中四分为位置,c:下四分位位置
a=(n+1)/4 b=2(n+1)/4 c=3(n+1)/4
举例说明:
n=7,则a=2,b=4,c=6,
则Q1=x2 *1+x3 *0,Q2=x4 *1+x5 *0,Q3=x6 *1+x7 *0
n=8,则a=2.25,b=4.5,c=6.75,
则Q1=x2 *0.75+x3 *0.25,Q2=x4 *0.5+x5 *0.5,Q3=x6 *0.25+x7 *0.75
n=9,则a=2.5,b=5,c=7.5,
则Q1=x2 *0.5+x3 *0.5,Q2=x5 *1+x6 *0,Q3=x7 *0.5+x8 *0.5
n=10,则a=2.75,b=5.5,c=8.25,
则Q1=x2 *0.25+x3 *0.75,Q2=x5 *0.5+x6 *0.5,Q3=x8 *0.75+x9 *0.25
最大最小规范化:
标准差规范化: ,
小数点定标法:
(小数点定标法:通过移动小数点的位数,将属性值映射到[-1,1]之间,移动的小数点位数取决于属性值绝对值的最大值。)
变异系数:
(为标准差,为平均值)
(变异系数主要用来比较两个或多个具有不同单位或不同波动幅度的数据集的离中趋势。)
均值:x‾ = 1/n Σ(xi)
标准差:
示例代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 计算截距和斜率
df = pd.read_excel('tax.xlsx', index_col='年份')
x = np.array(df.iloc[:, 1]).reshape([-1, 1]) # 国民生产总值
y = np.array(df.iloc[:, 0]).reshape([-1,1]) # 税收
reg = LinearRegression().fit(x, y)
a0=str(reg.coef_)[2:-2]
a1=str(reg.intercept_)[1:-1]
print("斜率k的值为:",a0)
print("截距b的值为:",a1)
# 绘制散点图和直线图
plt.figure()
plt.plot(np.reshape(x, (-1,1)), reg.predict(np.reshape(x, (-1,1)))) # 直线图
plt.scatter(df.iloc[:,1], df.iloc[:,0], c='r', marker='o') # 散点图
plt.xlabel('国民生产总值')
plt.ylabel('税收')
plt.title('税收与国民生产总值')
plt.show()
运行结果如下:
斜率k的值为: 0.18732251
截距b的值为: -2546.73626617
(1)支持度:项集A、B同时发生的概率称为关联度规则的支持度(也称为相对支持度)。
支持度计算公式:Support(A⇒B)=P(A∪B)=(A、B同时发生的事务个数)/(所有事务的个数)
(2)置信度:项集A发生,则项集B发生的概率为关联规则的置信度。
置信度计算公式:Confidence(A⇒B)=P(B|A)=(A、B同时发生的事务个数)/(A发生的事务个数)
(3)最小支持度和最小置信度的设置:最小支持度表示项目集在统计意义上的最低重要性,最小置信度表示关联规则的最低可靠性。
同时满足最小支持度阈值和最小置信度阈值的规则称为强规则。
示例代码如下:
import pandas as pd
from apriori import * # 导入自行编写的apriori函数
inputfile = 'menu_orders.xlsx' # 数据导入文件
outputfile = 'apriori_rules.xlsx' # 结果导出文件
data = pd.read_excel(inputfile, header = None)
ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) # 转换0-1矩阵的过渡函数
b = map(ct, data.values) # 用map方式执行
newdata = pd.DataFrame(list(b)).fillna(0) # 实现矩阵转换,空值用0填充
support = 0.2 # 设定最小支持度
confidence = 0.5 # 设定最小置信度
ms = '---' # 连接符,默认'--',用来区分不同元素,如A--B。
find_rule(newdata, support, confidence, ms).to_excel(outputfile) # 保存结果
运行结果如下:
R²=ESS/TSS=(TSS-RSS)/TSS=1-RSS/TSS=1-∑(yi-yˆ)²/∑(yi-y‾)²
yˆ为预测值,y‾为平均值,R越接近1,拟合度越高,越接近0,拟合度越低。
部分示例代码如下:
from sklearn.metrics import r2_score
x = np.array(df.iloc[:, 1]).reshape([-1, 1]) # 国民生产总值
y_pred = reg.predict(np.reshape(x, (-1,1)))
print("r^2 = ", r2_score(y, y_pred))
示例代码如下:
import pandas as pd
from sklearn.tree import DecisionTreeClassifier as DTC # 导入决策树分类器
from sklearn.tree import export_graphviz # 导入可视化决策树
data = pd.read_excel('sales_data.xlsx', index_col = '序号') # 导入数据
data.shape
data.head(10)
data[data == '好'] = 1
data[data == '是'] = 1
data[data == '高'] = 1
# data[data == '坏'] = 0
# data[data == '否'] = 0
# data[data == '低'] = 0
data[data != 1] = -1
data.head(10)
X = data.iloc[:,:3].astype(int)
Y = data.iloc[:,3].astype(int)
dtc = DTC(criterion='entropy') # 建立决策树模型,基于信息熵
dtc.fit(X, Y) #训练模型
x = pd.DataFrame(X)
with open('tree.dot', 'w', encoding="utf-8") as f:
export_graphviz(dtc, feature_names=x.columns, out_file=f)
f.close()
运行结果文件内容如下:
K-Means聚类算法过程如下:
(1)从n个样本数据中心随机选取k个对象作为初始的聚类中心。
(2)分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中。
(3)所有对象分配完成后,重新计算k个聚类的中心。
(4)与前一次计算得到的k个聚类中心比较,如果聚类中心发生变化,转到步骤2,未转移则继续。
(5)当质心不发生变化时,停止输出聚类结果。
注:由于聚类的结果可能依赖初始聚类中心的随机选择,使结果偏离全局最优分类,故在实践中,通常选择不同的初始聚类中心,多次运行K-Means算法。
示例代码如下:
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
k = 5 # 设置聚类的类别
iteration = 500 # 聚类最大循环次数
data = pd.read_excel('consumption_data.xlsx', index_col = 'Id') # 读取数据
data_ye=data.iloc[:,[0,1]] #获取第1列和第2列数据
# KMeans 内部会自己做归一化处理
kms = KMeans(n_clusters = k,max_iter = iteration,random_state=1234) # 分为k类,并发数4
kms.fit(data_ye) # 开始聚类
label_pred = kms.labels_ #获取每个样本点对应的类别
x0=data_ye[label_pred==0]
x1=data_ye[label_pred==1]
x2=data_ye[label_pred==2]
x3=data_ye[label_pred==3]
x4=data_ye[label_pred==4]
r1 = pd.Series(kms.labels_).value_counts() # 统计各个类别的数目
r2 = pd.DataFrame(kms.cluster_centers_) # 找出聚类中
print("各个聚类中心:\n",r2)
#根据聚类结果进行可视化显示(散点图)
plt.figure(figsize=(10,6))
plt.scatter(x0.iloc[:,0],x0.iloc[:,1],marker='o',c="c",label='label0') # c为淡蓝色
plt.scatter(x1.iloc[:,0],x1.iloc[:,1],marker='v',c="g",label='label1') # g为绿色
plt.scatter(x2.iloc[:,0],x2.iloc[:,1],marker='o',c="k",label='label2') # k为黑色
plt.scatter(x3.iloc[:,0],x3.iloc[:,1],marker='*',c="r",label='label3') # r为红色
plt.scatter(x4.iloc[:,0],x4.iloc[:,1],marker='*',c="b",label='label4') # b为深蓝色
plt.scatter(r2.iloc[:,0],r2.iloc[:,1],marker='o',c="m",label='聚类中心') # m为紫色
plt.legend()
plt.show()
运行结果如下:
示例代码1如下:
import pandas as pd
from sklearn.linear_model import LogisticRegression as LR # 导入逻辑回归模型
from sklearn.model_selection import train_test_split # 导入拆分数据集函数
df=pd.read_excel('bankloan.xlsx') # 导入数据集
X=df.iloc[:,0:8] # 分离自变量x
Y=df.iloc[:,8] # 分离因变量y
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.3) # 拆分训练集(0.7)和测试集(0.3)
# 模型训练测试
lr = LR() # 建立逻辑回归模型
model = lr.fit(X_train, Y_train) # 用训练集训练模型
print("模型回归系数为:",model.coef_) #显示模型回归系数
print("模型截距为:",model.intercept_)
ceshi=model.score(X_test, Y_test) #利用测试集检验模型
print("相关系数为:",ceshi)
# 模型应用
xnew = pd.DataFrame([[20,3,2,10,100,6,8,6]], columns=['年龄','教育','工龄','地址','收入','负债率','信用卡负债','其他负债'])
print("待计算信息为:",xnew)
ynew=lr.predict(xnew)
xnew['违约'] = ynew
if(int(xnew['违约'])==1):
print("根据计算概率得:该用户违约的可能性较大")
else:
print("根据计算概率得:该用户违约的可能性较小")
运行结果如下:
示例代码2如下:
# 绘制散点图,确定模型
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
df = pd.read_excel('tax_all.xlsx', index_col='年份')
# 绘制各关系子图作可视化分析
y = df.iloc[:,0]
x1 = df.iloc[:,1]
x2 = df.iloc[:,2]
x3 = df.iloc[:,3]
plt.figure(figsize=(14,4)) # 设置图框大小尺寸
plt.subplot(1,3,1)
plt.plot(x1, y, 'ob')
plt.legend(['GDP'])
plt.subplot(1,3,2)
plt.plot(x2, y, 'xr')
plt.legend(['expand'])
plt.subplot(1,3,3)
plt.plot(x3, y, 'sk')
plt.legend(['CPI'])
plt.show()
#绘制各关系图作数据可视化分析
plt.figure(figsize=(6,4)) # 设置图框大小尺寸
plt.plot(x1, y, color='r', linewidth=1.5, linestyle='-', label='GDP')
plt.plot(x2, y, color='b', linewidth=1.5, linestyle='--', label='expand')
plt.plot(x3, y, color='k', linewidth=1.5, linestyle='-.', label='CPI')
plt.legend()
plt.show()
#模型训练
x = df.iloc[:,1:4] #GDP, expand, CPI
y = df.iloc[:,0] #tax
X_train,X_test,y_train,y_test = train_test_split(x,y,test_size=0.2, random_state=42) #拆分训练集和测试集
model = LinearRegression() #实例化线性回归模型
reg = model.fit(X_train,y_train) #训练模型 print([reg.coef_, reg.intercept_])
#模型预测
pre_value = reg.predict(X_test) # print(pre_value)
#模型评价
result = reg.score(X_test,y_test)# print(result)
#模型拟合可视化
plt.figure(figsize=(6,4))
plt.plot(range(len(y_test)),y_test)
plt.plot(range(len(y_test)),pre_value)
plt.show()
#查看拟合优度
# 用训练集进行拟合优度,验证回归方程是否合理
def get_lr_stats(x, y, model):
message0 = ('多元线性回归方程为: '+'y' + '=' + str(model.intercept_) + ' + ' +str(model.coef_[0]) + ' * GDP'
' + ' +str(model.coef_[1]) + ' * expand' ' + ' +str(model.coef_[2]) + ' * CPI')
from scipy import stats
n = len(x)
y_prd = model.predict(x)
Regression = sum((y_prd - np.mean(y))**2) # 回归平方和
Residual = sum((y - y_prd)**2) # 残差平方和
total = sum((y-np.mean(y))**2) #总体平方和
R_square = 1-Residual / total # 相关性系数R^2
message1 = ('相关系数(R^2): ' + str(R_square) + ';' + '\n'+ '总体平方和(TSS): ' + str(total) + ';' + '\n')
message2 = ('回归平方和(RSS): ' + str(Regression) + ';' + '\n残差平方和(ESS): ' + str(Residual) + ';' + '\n')
return print(message0 +'\n' +message1 + message2 )
# get_lr_stats(X_train,y_train,reg) # 该式有误
get_lr_stats(X_test,y_test,reg)
运行结果如下: