特征映射(机器学习)

有时数据的分类并不像我们想象的那么简单,需要高次曲线才能分类。

就像下面的数据:

数据集最后给出:

我们这样看,至少需要达到2次以及以上的曲线才可以进行比较准确的分类。

比如如果已知数据有3列(两列特征)

x1x2y
-1-11
0.50.50
011

那么我们的目标是

[

1,

x1,

x2,

x1*x2,

x1^2,

x2^2

]

现在的问题是如何将已经有的两列转化为这么6列?

我们可以按照以下推导:

x_{1}^{0}x_{2}^{0} \\ x_{1}^{0}x_{2}^{1}\\ x_{1}^{0}x_{2}^{2}\\ x_{1}^{1}x_{2}^{0}\\ x_{1}^{1}x_{2}^{1}\\ x_{1}^{2}x_{2}^{0}

def feature_mapping(x1, x2, power):data = {}for i in range(0, power + 1):for j in range(power - i + 1):data['f{}{}'.format(i,j)]=np.power(x1,i)*np.power(x2,j)return pd.DataFrame(data)x1=data['Exam1']
x2=data['Exam2']data2=feature_mapping(x1,x2,2)
print(data2.head())

    f00       f01           f02           f10            f11            f20
0  1.0  0.69956  0.489384  0.051267  0.035864  0.002628
1  1.0  0.68494  0.469143 -0.092742 -0.063523  0.008601
2  1.0  0.69225  0.479210 -0.213710 -0.147941  0.045672
3  1.0  0.50219  0.252195 -0.375000 -0.188321  0.140625
4  1.0  0.46564  0.216821 -0.513250 -0.238990  0.263426

取数据集:

x1 = data['Exam1']
x2 = data['Exam2']data2 = feature_mapping(x1, x2, 2)
# print(data2.head())X = data2.values
print(X.shape)
y = data['Accepted'].values.reshape((len(data.iloc[:,-1]), 1))
print(y.shape)

(118, 6)
(118, 1)

损失函数:

因为非线性的很容易进行过拟合,所以需要进行正则化。

那么什么是正则化呢?

我们先看一下最后得到的损失函数的形式

J(\theta)=-\frac{1}{m}[y*log(\hat{y})+(1-y)*log(1-\hat{y})]+\frac{\lambda }{2m}\sum_{j=1}^{n}

这里面的最后一项用来调节参数,防止出现过拟合和欠拟合。

注意这里的j是从1开始的,我们原来的X多加了一列1(索引为0),这里从1开始的,没有计算哪个常数。

求导后:

for j==0:

\frac{\partial J(\theta)}{\partial \theta_{j}}=\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)}_{j}

for j>=1:

\frac{\partial J(\theta)}{\partial \theta_{j}}=\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)}_{j}+\frac{\lambda }{m}\theta_{j}

def sigmoid(z):return 1.0 / (1 + np.exp(-z))def cost_function(X, y, theta, lamba):A = sigmoid(X @ theta)first = y * np.log(A)second = (1 - y) * np.log(1 - A)reg = np.sum(np.power(theta[1:], 2)) * lamba / (2 * len(X))return -np.sum(first + second) / len(X) + regtheta = np.zeros((28,1))
lamda =1
cost_init = cost_function(X,y,theta,lamda)
print(cost_init)

0.6931471805599454
 

梯度下降:

def gradientDescent(X, y, theta, alpha, iters, lamba):costs = []m = len(X)reg = theta[1:] * lamba / m                #后面的惩罚项(防止过拟合)reg = np.insert(reg, 0, values=0, axis=0)  #每次将常数置为0for i in range(iters):A = sigmoid(X @ theta)                 #预测值theta = theta - alpha / m * (X.T @ (A - y) + reg)   #梯度下降cost = cost_function(X, y, theta, lamba)            #损失函数costs.append(cost)                 return costs, theta

预测:

alpha = 0.001
iters = 200000
lamba = 0.001
costs, theta = gradientDescent(X, y,theta,alpha,iters,lamba)print("---------------------------")
print(theta)plt.figure()
plt.plot(range(iters), costs, label='Cost')
plt.xlabel('Iterations')
plt.ylabel('Cost')
plt.title('Cost Function Convergence')
plt.legend()
plt.show()def predict(X,theta):pre = sigmoid(X@theta)return [1 if i >= 0.5 else 0 for i in pre ]y_pre = predict(X,theta)# 绘制真实值与预测值的比较图
plt.figure()
plt.plot(range(len(y)), y, label='real_values', linestyle='-', marker='o', color='g')
plt.plot(range(len(y)), y_pre, label='pre_value', linestyle='--', marker='x', color='r')
plt.xlabel('label')
plt.ylabel('value')
plt.title('differ')
plt.legend()
plt.show()

theta=[[ 1.87511207]
 [ 2.023306  ]
 [-2.13296198]
 [-0.23971119]
 [-1.94042125]
 [-0.757585  ]
 [-1.56403399]
 [ 1.18536314]
 [-1.68977623]
 [-0.63345976]
 [-0.53685159]
 [-0.54677843]
 [-0.29785185]
 [-3.10618505]
 [-0.67450464]
 [-1.02252107]
 [-0.48703712]
 [-0.55736928]
 [ 0.32233067]
 [-0.14001433]
 [-0.07578518]
 [ 0.00558004]
 [-2.37395054]
 [-0.38709684]
 [-0.49270366]
 [-0.35696397]
 [ 0.01562081]
 [-1.74571902]]

整体代码:

import pandas as pd
import numpy as np
import matplotlibmatplotlib.use('tKAgg')
import matplotlib.pyplot as plt# 读取数据
path = "d:\\JD\\Documents\\大学等等等\\自学部分\\machine_-learning-master\\machine_-learning-master\\ex_2\\ex2data2.txt"
data = pd.read_csv(path, names=['Exam1', 'Exam2', 'Accepted'])
print(data.head())# fig, ax = plt.subplots()
# ax.scatter(data[data['Accepted'] == 0]['Exam1'], data[data['Accepted'] == 0]['Exam2'], c='r', marker='x', label='y=0')
# ax.scatter(data[data['Accepted'] == 1]['Exam1'], data[data['Accepted'] == 1]['Exam2'], c='g', marker='o', label='y=1')
# ax.legend()
# ax.set(
#     xlabel='exam1',
#     ylabel='exam2'
# )
# plt.show()def feature_mapping(x1, x2, power):data = {}for i in range(0, power + 1):for j in range(power - i + 1):data['f{}{}'.format(i, j)] = np.power(x1, i) * np.power(x2, j)return pd.DataFrame(data)x1 = data['Exam1']
x2 = data['Exam2']data2 = feature_mapping(x1, x2, 6)
# print(data2.head())X = data2.values
print(X.shape)
y = data['Accepted'].values.reshape((len(data.iloc[:, -1]), 1))
print(y.shape)def sigmoid(z):return 1.0 / (1 + np.exp(-z))def cost_function(X, y, theta, lamba):A = sigmoid(X @ theta)first = y * np.log(A)second = (1 - y) * np.log(1 - A)reg = np.sum(np.power(theta[1:], 2)) * lamba / (2 * len(X))return -np.sum(first + second) / len(X) + regtheta = np.zeros((28, 1))
lamda = 1# cost_init = cost_function(X,y,theta,lamda)
# print(cost_init)def gradientDescent(X, y, theta, alpha, iters, lamba):costs = []m = len(X)reg = theta[1:] * lamba / mreg = np.insert(reg, 0, values=0, axis=0)for i in range(iters):A = sigmoid(X @ theta)theta = theta - alpha / m * (X.T @ (A - y) + reg)cost = cost_function(X, y, theta, lamba)costs.append(cost)return costs, thetaalpha = 0.001
iters = 200000
lamba = 0.001
costs, theta = gradientDescent(X, y,theta,alpha,iters,lamba)print("---------------------------")
print(theta)plt.figure()
plt.plot(range(iters), costs, label='Cost')
plt.xlabel('Iterations')
plt.ylabel('Cost')
plt.title('Cost Function Convergence')
plt.legend()
plt.show()def predict(X,theta):pre = sigmoid(X@theta)return [1 if i >= 0.5 else 0 for i in pre ]y_pre = predict(X,theta)# 绘制真实值与预测值的比较图
plt.figure()
plt.plot(range(len(y)), y, label='real_values', linestyle='-', marker='o', color='g')
plt.plot(range(len(y)), y_pre, label='pre_value', linestyle='--', marker='x', color='r')
plt.xlabel('label')
plt.ylabel('value')
plt.title('differ')
plt.legend()
plt.show()

附件:

数据集

0.051267,0.69956,1
-0.092742,0.68494,1
-0.21371,0.69225,1
-0.375,0.50219,1
-0.51325,0.46564,1
-0.52477,0.2098,1
-0.39804,0.034357,1
-0.30588,-0.19225,1
0.016705,-0.40424,1
0.13191,-0.51389,1
0.38537,-0.56506,1
0.52938,-0.5212,1
0.63882,-0.24342,1
0.73675,-0.18494,1
0.54666,0.48757,1
0.322,0.5826,1
0.16647,0.53874,1
-0.046659,0.81652,1
-0.17339,0.69956,1
-0.47869,0.63377,1
-0.60541,0.59722,1
-0.62846,0.33406,1
-0.59389,0.005117,1
-0.42108,-0.27266,1
-0.11578,-0.39693,1
0.20104,-0.60161,1
0.46601,-0.53582,1
0.67339,-0.53582,1
-0.13882,0.54605,1
-0.29435,0.77997,1
-0.26555,0.96272,1
-0.16187,0.8019,1
-0.17339,0.64839,1
-0.28283,0.47295,1
-0.36348,0.31213,1
-0.30012,0.027047,1
-0.23675,-0.21418,1
-0.06394,-0.18494,1
0.062788,-0.16301,1
0.22984,-0.41155,1
0.2932,-0.2288,1
0.48329,-0.18494,1
0.64459,-0.14108,1
0.46025,0.012427,1
0.6273,0.15863,1
0.57546,0.26827,1
0.72523,0.44371,1
0.22408,0.52412,1
0.44297,0.67032,1
0.322,0.69225,1
0.13767,0.57529,1
-0.0063364,0.39985,1
-0.092742,0.55336,1
-0.20795,0.35599,1
-0.20795,0.17325,1
-0.43836,0.21711,1
-0.21947,-0.016813,1
-0.13882,-0.27266,1
0.18376,0.93348,0
0.22408,0.77997,0
0.29896,0.61915,0
0.50634,0.75804,0
0.61578,0.7288,0
0.60426,0.59722,0
0.76555,0.50219,0
0.92684,0.3633,0
0.82316,0.27558,0
0.96141,0.085526,0
0.93836,0.012427,0
0.86348,-0.082602,0
0.89804,-0.20687,0
0.85196,-0.36769,0
0.82892,-0.5212,0
0.79435,-0.55775,0
0.59274,-0.7405,0
0.51786,-0.5943,0
0.46601,-0.41886,0
0.35081,-0.57968,0
0.28744,-0.76974,0
0.085829,-0.75512,0
0.14919,-0.57968,0
-0.13306,-0.4481,0
-0.40956,-0.41155,0
-0.39228,-0.25804,0
-0.74366,-0.25804,0
-0.69758,0.041667,0
-0.75518,0.2902,0
-0.69758,0.68494,0
-0.4038,0.70687,0
-0.38076,0.91886,0
-0.50749,0.90424,0
-0.54781,0.70687,0
0.10311,0.77997,0
0.057028,0.91886,0
-0.10426,0.99196,0
-0.081221,1.1089,0
0.28744,1.087,0
0.39689,0.82383,0
0.63882,0.88962,0
0.82316,0.66301,0
0.67339,0.64108,0
1.0709,0.10015,0
-0.046659,-0.57968,0
-0.23675,-0.63816,0
-0.15035,-0.36769,0
-0.49021,-0.3019,0
-0.46717,-0.13377,0
-0.28859,-0.060673,0
-0.61118,-0.067982,0
-0.66302,-0.21418,0
-0.59965,-0.41886,0
-0.72638,-0.082602,0
-0.83007,0.31213,0
-0.72062,0.53874,0
-0.59389,0.49488,0
-0.48445,0.99927,0
-0.0063364,0.99927,0
0.63265,-0.030612,0
 


 

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

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

相关文章

Axolotl

文章目录 一、关于 Axolotl特点Axolotl支持 二、快速入门⚡用法 三、环境设置1、Docker2、Conda/Pip venv3、Cloud GPU4、Bare Metal Cloud GPULambdaLabsGCP 5、Windows6、Mac7、Google Colab8、通过SkyPilot在公共云上启动9、通过 dstack 在公共云上启动 四、其他高级设置1、…

网站成长时间轴页面,网站发展记录页源码

一、源码描述 这是一款网站时间轴HTML源码,样式设计精美并且使用简单,主要用于记录你的网站发展历程,或者可以用于发布心情动态等,左侧年份可以折叠起来,页面底部是导航区域,可以自定义文本和链接。 二、…

Azure Repos 仓库管理

从远端仓库克隆到本地 前提:本地要安装git,并且登录了账户 1.在要放这个远程仓库的路径下,打git 然后 git clone https://.. 如果要登录验证,那就验证下 克隆完后,cd 到克隆的路径, 可以用 git branch -a //查看分支名 git status //查看代码状态 删除…

对于GPT-5在一年半后发布的期待!

首先,如果GPT-5真如OpenAI首席技术官米拉穆拉蒂(Mira Murati)在采访中所透露的那样,在一年半后发布,并在某些领域达到博士级的智能,这无疑将是一个令人振奋的消息。这一预测不仅反映了AI技术的快速发展&…

MPAS跨尺度、可变分辨率模式实践技术

跨尺度预测模式(The Model for Prediction Across Scales - MPAS)是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发,其由3个部分组成,分别称为 MPAS-A(大气模型)、MPAS-O(海洋模型&…

python实例练习00001:打开文件输出文件内容

try:file input(enter the file :)with open(file, r) as f:data f.read()print(data) except FileNotFoundError:print(fthe file {file} does not exists:) 打开windows的cmd运行程序,效果如下:

vscode常用组件

1.vue-helper 启用后点击右下角注册,可以通过vue组件点击到源码里面 2.【Auto Close Tag】和【Auto Rename Tag】 3.setting---Auto Reveal Exclude vscode跳转node_modules下文件,没有切换定位到左侧菜单目录> 打开VSCode的setting配置&#xff…

非法闯入智能监测摄像机:安全守护的新利器

在当今社会,安全问题愈发受到重视。随着科技的进步,非法闯入智能监测摄像机应运而生,成为保护家庭和财产安全的重要工具。这种摄像机不仅具备监控功能,还集成了智能识别和报警系统,能够在第一时间内检测到潜在的入侵行…

第七天 SpringBoot与SpringCloud微服务项目交付

Spring Cloud微服务项目交付 微服务扫盲篇 微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。 单体应用架构 如下是传统打车软件架构图: 这种单体应用比较适合于小项…

图像处理中的Scharr算子的原理,并附OpenCV和MATLAB示例代码

Scharr算子是图像处理中的一种边缘检测算子,主要用于计算图像梯度的边缘检测。与Sobel算子类似,Scharr算子也使用卷积核来计算图像的导数,但Scharr算子在精度和抗噪性方面表现更优。其原理如下: 原理 梯度计算 在图像处理中&…

服务器数据恢复—raid5阵列热备盘同步失败导致lun不可用的数据恢复案例

服务器存储数据恢复环境: 华为S5300存储中有一组由16块FC硬盘组建的RAID5磁盘阵列(包含一块热备盘)。 服务器存储故障: 该存储中的RAID5阵列1块硬盘由于未知原因离线,热备盘上线并开始同步数据,数据同步到…

Android C++系列:Linux文件系统(二)

1. VFS虚拟文件系统 Linux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660 等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统 都可以mount到某个目录下,使我们看到一个…

如何提升运维管理的精细化管理能力

在当今这个信息化的时代,运维管理已经成为企业IT架构中不可或缺的一环。随着企业业务的不断扩张和技术的日益复杂,提升运维管理的精细化管理能力显得尤为重要。精细化管理不仅能够提高企业的运营效率,还能有效降低运维成本,为企业…

最新PHP自助商城源码,彩虹商城源码

演示效果图 后台效果图 运行环境: Nginx 1.22.1 Mysql5.7 PHP7.4 直接访问域名即可安装 彩虹自助下单系统二次开发 拥有供货商系统 多余模板删除 保留一套商城,两套发卡 源码无后门隐患 已知存在的BUG修复 彩虹商城源码:下载 密码:chsc 免责声明&…

05 以物品与用户为基础个性化推荐算法的四大策略

《易经》:“九二:见龙在田,利见大人”。九二是指阳爻在卦中处于第二位,见龙指龙出现在地面上,开始崭露头角,但是仍须努力,应处于安于偏下的位置。 本节是模块二第一节,模块二讲解传…

Python中的数据结构:五彩斑斓的糖果盒

在Python编程的世界里,数据结构就像是一个个五彩斑斓的糖果盒,每一种糖果都有其独特的味道和形状。这些多姿多彩,形状和味道各异的糖果盒子包括了:List(列表)、Tuple(元组)、Diction…

如何保证数据库和redis的数据一致性

1、简介 在客户端请求数据时,如果能在缓存中命中数据,那就查询缓存,不用在去查询数据库,从而减轻数据库的压力,提高服务器的性能。 2、问题如何保证两者的一致性 先更新数据库在删除缓存 难点:如何保证…

微信小程序,订阅消息

微信小程序,订阅消息,完整流程 1.选择需要的模版 2.前端调用订阅消息 注:tmplIds:模板ID模版id,这里也可以选多个 wx.requestSubscribeMessage({tmplIds: [7UezzOrfJg_NIYdE1p*******],success (res) { console.log(res);wx.g…

一款简单的音频剪辑工具

Hello,大家好呀,我是努力搬砖的小画。 今天小画给大伙分享一款强大的音频剪辑工具--【剪画】,无需下载就能使用,支持对MP3、M4A、AAC等多种格式文件进行剪辑、分割、拼接、混音、变声、淡入淡出、音频格式转换、视频转音频、消除…

Hive 函数

分类 Hive 的函数分为两大类:内置函数(Built-in-Functions)、用户自定义函数(User-Defined-Functions);内置函数可分为:数值类型函数、日期类型函数、字符串类型函数、集合函数等;用…