1、模型存在多个需要预测的y值,如果是这种情况下,简单来讲可以直接模型构建,在模型内部会单独的处理每个需要预测的y值
,相当于对每个y创建一个模型
from sklearn.preprocessing import Imputer
#空值的处理
# 使用Imputer给定缺省值,默认的是以mean
# 对于缺省值,进行数据填充;默认是以列/特征的均值填充
df_data = df_data.replace('?',np.nan).astype('float64')
print(df_data.info())
imputer = Imputer(missing_values = np.nan)
df_data= imputer.fit_transform(df_data) # ------------------ 结果是一个数组
df_data = pd.DataFrame(df_data,columns=columns)
df_data.info()
详情见numpy、pandas
https://blog.csdn.net/qq_16555103/article/details/89329006 ------ 标签编码Encode 与 哑编码 1 - of - k
https://blog.csdn.net/qq_16555103/article/details/88801650 ----------- auc 与 ROC计算
================================= 一起计算 ROC与AUC值 ===================================
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, Y_train)
# b. 模型效果输出
## 将正确的数据转换为矩阵形式
y_test_hot = label_binarize(Y_test,classes=(1,2,3)) ---------- 该方法的重点
## 得到预测属于某个类别的概率值
knn_y_score = knn.predict_proba(X_test)
## 计算roc的值
knn_fpr, knn_tpr, knn_threasholds = metrics.roc_curve(y_test_hot.ravel(),knn_y_score.ravel())
## 计算auc的值
knn_auc = metrics.auc(knn_fpr, knn_tpr)
print ("KNN算法准确率:", knn.score(X_train, Y_train))
print ("KNN算法AUC值:", knn_auc)
# c. 模型预测
knn_y_predict = knn.predict(X_test)
例: -------------------- 多分类计算roc曲线和AUC值
Y_testTrue_column1 = label_binarize(Y_test[columns[-4]],classes= (0,1,2))[:,0:-1].reshape(-1)
print(Y_testTrue_column1)
Y_testPredict_column1porba = rf.predict_proba(X_test)[0].ravel() ------再有多个y目标属性时,返回的是
一个包含n个目标y的列表
print(Y_testPredict_column1porba)
print('获取roc曲线的横坐标,纵坐标,阈值:{}'.format(metrics.roc_curve(
Y_testTrue_column1,Y_testPredict_column1porba))) # 获得两个数组(fpr,tpr)
fpr1,tpr1,theshold1 = metrics.roc_curve(Y_testTrue_column1, Y_testPredict_column1porba)
fpr2,tpr2,theshold2 = metrics.roc_curve(label_binarize(Y_test[columns[-3]],
classes= (0,1,2))[:,0:-1].reshape(-1),
rf.predict_proba(X_test)[1].reshape(-1))
fpr3,tpr3,theshold3 = metrics.roc_curve(label_binarize(Y_test[columns[-2]],
classes= (0,1,2))[:,0:-1].reshape(-1),
rf.predict_proba(X_test)[2].reshape(-1))
fpr4,tpr4,theshold4 = metrics.roc_curve(label_binarize(Y_test[columns[-1]],
classes= (0,1,2))[:,0:-1].reshape(-1),
rf.predict_proba(X_test)[3].reshape(-1))
# auc 值:
print('='*100)
print('第一列y的目标属性的auc值:{}'.format(metrics.auc(fpr1,tpr1)))
print('第二列y的目标属性的auc值:{}'.format(metrics.auc(fpr2,tpr2)))
print('第三列y的目标属性的auc值:{}'.format(metrics.auc(fpr3,tpr3)))
print('第四列y的目标属性的auc值:{}'.format(metrics.auc(fpr4,tpr4)))
from sklearn.datasets import make_blobs
from sklearn.metrics.pairwise import pairwise_distances_argmin
# make_blobs 创建高斯分布的数据,x是数据,y是x属于哪个蔟类型索引
x, y = make_blobs(n_samples=1000, n_features=2, centers=3, cluster_std=0.5, center_box=(-10, 10))
x, y = make_blobs(n_samples=1000, n_features=2, centers=3, cluster_std=[0.5, 1.0, 3.0], center_box=(-10, 10))
x, y = make_blobs(n_samples=1000, n_features=2, centers=3, cluster_std=[0.5, (1.0, 1.5), (0.1, 3.0)],center_box=(-10, 10))
x, y = make_blobs(n_samples=1000, n_features=2, centers=3,cluster_std=[(1.0, 2.0), (1.0, 1.5), (0.5, 2.0)],center_box=(-10, 10))
'''
x是数据,y是x属于哪个蔟类型索引
n_samples ------ 数据个数
n_features ------ 数据维度
centers ------ 数据中心有多少蔟类型,可以接列表元组
cluster_std 高斯分布的方差,可以接元组
center_box高斯分布的取值
'''
print((np.shape(x), np.shape(y)))
# print(x)
# print(y)
=======================================================================================
"""
pairwise_distances_argmin: 功能是计算两个集合元素中元素的距离,返回最近元素所对应的下标
pairwise_distances_argmin(A, B): 对于A中的每个元素而言,计算B中所有元素到A中当前元素的距离,选择距离最近的那个元素
所对应的下标返回
"""
orders = pairwise_distances_argmin(
X=[[1.0], [2.0], [3.0]],
Y=[[0.5], [2.5], [1.4]]
)
import numpy as np
from scipy import misc
# 安装方式:pip install Pillow
from PIL import Image
from sklearn.utils import shuffle
from sklearn.cluster import KMeans
# 1. 加载数据
path = './xiaoren.png'
image = Image.open(path)
# image.show()
# 2.显示图片
image.show()
# 3.保存数据
misc.imsave('./result.png', new_image)