熵的基础知识,特征工程,特征归一化,交叉验证,grid search,模型存储与加载

1.自信息:

2.信息熵

3.p对Q的KL散度(相对熵)

证明kl散度大于等于0

 

4.交叉熵

可看出交叉熵==信息熵+相对熵

数据集地址:水果数据集_机器学习水果识别,水果分类数据集-机器学习其他资源-CSDN下载 

一,类别型特征和有序性特征 ,转变成onehot

def one_hot():# 随机生成有序型特征和类别特征作为例子X_train = np.array([['male', 'low'],['female', 'low'],['female', 'middle'],['male', 'low'],['female', 'high'],['male', 'low'],['female', 'low'],['female', 'high'],['male', 'low'],['male', 'high']])X_test = np.array([['male', 'low'],['male', 'low'],['female', 'middle'],['female', 'low'],['female', 'high']])from sklearn.preprocessing import LabelEncoder, OneHotEncoder# 在训练集上进行编码操作label_enc1 = LabelEncoder() # 首先将male, female用数字编码one_hot_enc = OneHotEncoder() # 将数字编码转换为独热编码label_enc2 = LabelEncoder() # 将low, middle, high用数字编码tr_feat1_tmp = label_enc1.fit_transform(X_train[:, 0]).reshape(-1, 1) # reshape(-1, 1)保证为一维列向量tr_feat1 = one_hot_enc.fit_transform(tr_feat1_tmp)tr_feat1 = tr_feat1.todense()print('=====male female one hot====')print(tr_feat1)tr_feat2 = label_enc2.fit_transform(X_train[:, 1]).reshape(-1, 1)print('===low middle high class====')print(tr_feat2)X_train_enc = np.hstack((tr_feat1, tr_feat2))print('=====train encode====')print(X_train_enc)# 在测试集上进行编码操作te_feat1_tmp = label_enc1.transform(X_test[:, 0]).reshape(-1, 1) # reshape(-1, 1)保证为一维列向量te_feat1 = one_hot_enc.transform(te_feat1_tmp)te_feat1 = te_feat1.todense()te_feat2 = label_enc2.transform(X_test[:, 1]).reshape(-1, 1)X_test_enc = np.hstack((te_feat1, te_feat2))print('====test encode====')print(X_test_enc)

 

二,特征归一化

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from mpl_toolkits.mplot3d import Axes3D
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_scoredef load_data():# 加载数据集fruits_df = pd.read_table('fruit_data_with_colors.txt')# print(fruits_df)print('样本个数:', len(fruits_df))# 创建目标标签和名称的字典fruit_name_dict = dict(zip(fruits_df['fruit_label'], fruits_df['fruit_name']))# 划分数据集X = fruits_df[['mass', 'width', 'height', 'color_score']]y = fruits_df['fruit_label']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/4, random_state=0)print('数据集样本数:{},训练集样本数:{},测试集样本数:{}'.format(len(X), len(X_train), len(X_test)))# print(X_train)return  X_train, X_test, y_train, y_test
#特征归一化
def minmax_scaler(X_train,X_test):scaler = MinMaxScaler()X_train_scaled = scaler.fit_transform(X_train)# print(X_train_scaled)#此时scaled得到一个最小最大值,对于test直接transform就行X_test_scaled = scaler.transform(X_test)for i in range(4):print('归一化前,训练数据第{}维特征最大值:{:.3f},最小值:{:.3f}'.format(i + 1,X_train.iloc[:, i].max(),X_train.iloc[:, i].min()))print('归一化后,训练数据第{}维特征最大值:{:.3f},最小值:{:.3f}'.format(i + 1,X_train_scaled[:, i].max(),X_train_scaled[:, i].min()))return  X_train_scaled,X_test_scaled
def show_3D(X_train,X_train_scaled):label_color_dict = {1: 'red', 2: 'green', 3: 'blue', 4: 'yellow'}colors = list(map(lambda label: label_color_dict[label], y_train))print(colors)print(len(colors))fig = plt.figure()ax1 = fig.add_subplot(111, projection='3d', aspect='equal')ax1.scatter(X_train['width'], X_train['height'], X_train['color_score'], c=colors, marker='o', s=100)ax1.set_xlabel('width')ax1.set_ylabel('height')ax1.set_zlabel('color_score')plt.show()fig = plt.figure()ax2 = fig.add_subplot(111, projection='3d', aspect='equal')ax2.scatter(X_train_scaled[:, 1], X_train_scaled[:, 2], X_train_scaled[:, 3], c=colors, marker='o', s=100)ax2.set_xlabel('width')ax2.set_ylabel('height')ax2.set_zlabel('color_score')plt.show()

 

三,交叉验证 

#交叉验证
def cross_val(X_train_scaled, y_train):k_range = [2, 4, 5, 10]cv_scores = []for k in k_range:knn = KNeighborsClassifier(n_neighbors=k)scores = cross_val_score(knn, X_train_scaled, y_train, cv=3)cv_score = np.mean(scores)print('k={},验证集上的准确率={:.3f}'.format(k, cv_score))cv_scores.append(cv_score)print('np.argmax(cv_scores)=',np.argmax(cv_scores))best_k = k_range[np.argmax(cv_scores)]best_knn = KNeighborsClassifier(n_neighbors=best_k)best_knn.fit(X_train_scaled, y_train)print('测试集准确率:', best_knn.score(X_test_scaled, y_test))

四,调用validation_curve 查看超参数对训练集和验证集的影响

# 调用validation_curve 查看超参数对训练集和验证集的影响
def show_effect(X_train_scaled, y_train):from sklearn.model_selection import validation_curvefrom sklearn.svm import SVCc_range = [1e-3, 1e-2, 0.1, 1, 10, 100, 1000, 10000]train_scores, test_scores = validation_curve(SVC(kernel='linear'), X_train_scaled, y_train,param_name='C', param_range=c_range,cv=5, scoring='accuracy')print(train_scores)print(train_scores.shape)train_scores_mean = np.mean(train_scores, axis=1)# print(train_scores_mean)train_scores_std = np.std(train_scores, axis=1)test_scores_mean = np.mean(test_scores, axis=1)test_scores_std = np.std(test_scores, axis=1)#plt.figure(figsize=(10, 8))plt.title('Validation Curve with SVM')plt.xlabel('C')plt.ylabel('Score')plt.ylim(0.0, 1.1)lw = 2plt.semilogx(c_range, train_scores_mean, label="Training score",color="darkorange", lw=lw)plt.fill_between(c_range, train_scores_mean - train_scores_std,train_scores_mean + train_scores_std, alpha=0.2,color="darkorange", lw=lw)plt.semilogx(c_range, test_scores_mean, label="Cross-validation score",color="navy", lw=lw)plt.fill_between(c_range, test_scores_mean - test_scores_std,test_scores_mean + test_scores_std, alpha=0.2,color="navy", lw=lw)plt.legend(loc="best")plt.show()# 从上图可知对SVM,C=100为最优参数svm_model = SVC(kernel='linear', C=1000)svm_model.fit(X_train_scaled, y_train)print(svm_model.score(X_test_scaled, y_test))

可看成,刚开始方差较大,然后模型趋于稳定,最后过拟合,C=100为最优参数。

五,grid_search,模型存储与加载

def grid_search(X_train_scaled, y_train):from sklearn.model_selection import GridSearchCVfrom sklearn.tree import DecisionTreeClassifierparameters = {'max_depth':[3, 5, 7, 9], 'min_samples_leaf': [1, 2, 3, 4]}clf = GridSearchCV(DecisionTreeClassifier(), parameters, cv=3, scoring='accuracy')print(clf)clf.fit(X_train_scaled, y_train)print('最优参数:', clf.best_params_)print('验证集最高得分:', clf.best_score_)# 获取最优模型best_model = clf.best_estimator_print('测试集上准确率:', best_model.score(X_test_scaled, y_test))return best_model
def model_save(best_model):# 使用pickleimport picklemodel_path1 = './trained_model1.pkl'# 保存模型到硬盘with open(model_path1, 'wb') as f:pickle.dump(best_model, f)def load_model(X_test_scaled,y_test):import pickle# 加载保存的模型model_path1 = './trained_model1.pkl'with open(model_path1, 'rb') as f:model = pickle.load(f)# 预测print('预测值为', model.predict([X_test_scaled[0, :]]))print('真实值为', y_test.values[0])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5G与AI深度融合,人类世界即将产生巨变

来源:系数据观整理自网络摘要:近几年,科技界有两大领域越来越热:一个是5G,一个是AI。两者都是能够改变时代的颠覆性技术。单独看5G或AI技术,它们的发展都面临重重挑战, 我们不妨脑洞大开&#x…

统计学第一章--最小二乘拟合正弦函数,正则化

#coding:utf-8 import numpy as np import scipy as sp from scipy.optimize import leastsq import matplotlib.pyplot as plt # 目标函数 def real_func(x):return np.sin(2*np.pi*x)# 多项式 def fit_func(p, x):f np.poly1d(p)# print(f,f)return f(x)# 残差 def residual…

装配式建筑连入自动驾驶技术,未来城市的房子居然是这个样子......

来源:gooood谷德设计网概念如果说古典的城市是关于神的,现代城市是关于资本和权力的,那么未来的城市就应该是关于人与自然的。人在朝朝暮暮,山山水水,风风雨雨,一草一木天地之间无不有感而发,触…

iOS6新特征:UICollectionView介绍-非常棒 -转

传送门:http://www.devdiv.com/forum.php?modviewthread&tid128378 转载于:https://www.cnblogs.com/ygm900/p/3652681.html

ROC曲线,AUC值,PR曲线,AP值

Receiver Operating Characteristic (ROC) with cross validation — scikit-learn 1.0.2 documentation Precision-Recall — scikit-learn 1.0.2 documentation 一,ROC 横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例…

报告:最大化人工智能(AI)机遇

来源:199IT互联网数据中心Microsoft发布了新报告“最大化AI机遇”,深入调查了数字转型的一个重要的技术力量,人工智能(AI)。报告将其定义为让计算机像人一样观察、学习、分析和评价以进行决策,解决问题的一…

统计学基本知识一

声明:文中的图来自于可汗学院公开课,若有侵权,联系我删除。 均值:一组数相加后除以这一组数的个数。 中位数:一组数从小到大排列,最中间的那个数,如果是偶数个,两个相加后除以2&am…

中科院陆汝钤获吴文俊人工智能最高成就奖,百度王海峰获吴文俊人工智能杰出贡献奖...

来源:AI 科技评论12 月 9 日上午,被誉为「中国智能科学技术最高奖」的吴文俊人工智能科学技术奖在苏州举行颁奖典礼。本届吴文俊人工智能奖共对 70 项人工智能成果授奖,包括吴文俊人工智能最高成就奖 1 项,吴文俊人工智能杰出贡献…

统计学基本知识二

声明:文中的图来自于可汗学院公开课,若有侵权,联系我删除。 中心极限定理:随着样本容量n的增加,样本均值或者样本和的频率图将很接近正态分布。 如下图就在求解样本均值。 如下图就是样本均值的频率图,很…

AI+零售:人工智能撬动零售变革

来源:乐晴智库精选人工智能的快速发展将有助于赋能新零售商,有效重构零售行业“人、货、场”等要素,提升各环节效率,最终提升消费者购物体验,推动零售行业迎来第五次变革。近年来,在数据、算法、技术等方面…

统计学基本知识三

声明:文中的图来自于可汗学院公开课,若有侵权,联系我删除。 假设检验: 先看一个z分布的例子: 注意:零假设一般倾向于保守的。 在上图中: 1、先假设零假设成立,即药物无效&#x…

测试归测试,自动驾驶向个人全面开放依然长路漫漫

来源:网易智能摘要在北京某地,乘客们正等待着乘坐百度“阿波罗”无人驾驶汽车。最近,百度与福特汽车启动了为期两年的L4级别自动驾驶联合测试项目,在特定的地理区域和特定天气条件下行驶无人驾驶汽车。自亨利福特的移动装配生产线…

利用opencv添加mask

第一种做法: import os import sys import random import math import numpy as np import skimage.io import matplotlib import matplotlib.pyplot as plt import cv2 import colorsys os.environ[CUDA_VISIBLE_DEVICES] 1 # Root directory of the project RO…

白宫计划2019年春季发布新版人工智能研究战略

来源:人工智能和大数据近日,据白宫科技政策办公室人工智能助理主任Lynne Parker表示,特朗普政府计划更新由奥巴马政府首次发布的人工智能研究与发展战略。2016年美国国家人工智能研究与发展战略计划概述了美国联邦研究资金的投入重点。2018年…

统计学基本知识四

代码可以参考之前的博客: https://blog.csdn.net/fanzonghao/article/details/85643653 https://blog.csdn.net/fanzonghao/article/details/81637669 声明:文中的图来自于可汗学院公开课,若有侵权,联系我删除。 线性回归&…

Openstack Havana的两个排错过程

问题一:Timeout wating on RPC response, topic:"network" 描述: 启动实例一直等待,然后变为error。查看日志,是 timeout waiting on rpc response, topic "network", method: "validate_networks"…

生活|全民AI时代:干洗店老板、高中生齐上阵

来源:大数据文摘 1975年冬天,旧金山半岛的广告牌上出现了一则有点“奇怪”的消息。“你是否在尝试自己做电脑开发呢?,如果是的话,参加我们的聚会!”这则通告来自当年的Homebrew计算机俱乐部。Homebrew是一…

python可迭代对象,迭代器,生成器

容器是一系列元素的集合,str、list、set、dict、file、sockets对象都可以看作是容器,容器都可以被迭代(用在for,while等语句中),因此他们被称为可迭代对象。 可迭代对象实现了__iter__方法,该方…

软件“吞噬”世界后,我们正在进入“活产品”时代

来源:资本实验室摘要:2011年,网景公司创始人与风险投资家马克安德森提出了一个著名的观点:“软件正在吞噬世界”。虽然他的观点最初聚焦于新一波互联网平台公司的成长,但对物理产品的发展也同样适用,因为现…

python读取与写入json+csv变成coco的json文件+安装labelme

一.python读取与输出json 1.python字典和json互转这里用json.dumps,还原则用json.loads,dumps以后就变为字符串了 import json# info {name: Damin, address: 北京, salary:88888} info {"name": "Damin", "address": "北京…