R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类...

news2025/1/5 15:03:51

原文链接:http://tecdat.cn/?p=21379

本文我们对逻辑回归和样条曲线进行介绍点击文末“阅读原文”获取完整代码数据)。

logistic回归基于以下假设:给定协变量x,Y具有伯努利分布,

 b3958724f55355d3e01d6fd734ca6cb5.png

目的是估计参数β。

回想一下,针对该概率使用该函数是

 b3077233d78ae2be2e3995b2f142ac60.png

(对数)似然函数

对数似然

 493fde9f77662b11b3c7b20527f934c2.png

其中51b42bf2a59ae2b5c8c4b953aee6f48d.png。数值方法基于(数值)下降梯度来计算似然函数的 最大值。对数似然(负)是以下函数

negLogLik = function(beta){
 -sum(-y*log(1 + exp(-(X%*%beta))) - (1-y)*log(1 + exp(X%*%beta)))
 }

现在,我们需要一个起始点来启动算法

optim(par = beta_init, negLogLik, hessian=TRUE, method = "BFGS", control=list(abstol=1e-9))

在这里,我们得到

logistic_opt$par
 (Intercept)        FRCAR        INCAR        INSYS    
 1.656926397  0.045234029 -2.119441743  0.204023835 
       PRDIA        PAPUL        PVENT        REPUL 
-0.102420095  0.165823647 -0.081047525 -0.005992238

让我们在这里验证该输出是否有效。例如,如果我们(随机)更改起点的值会怎么样

plot(v_beta)
par(mfrow=c(1,2))
hist(v_beta[,1],xlab=names( )[ ])
hist(v_beta[,2],xlab=names( )[2])

847b3edf81c8d3b7b75232e73fa8b22b.png

这里有个问题。


点击标题查阅往期内容

f68df0fb92c707475f5d3e5249856816.jpeg

R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例

outside_default.png

左右滑动查看更多

outside_default.png

01

2c879610864382a2d91aea9482f8365a.png

02

71c38b08a889d0e4072b361d9bd22fd1.png

03

e8b60c8f18a72520be142a3c0d8cbf26.png

04

a81207880b74c0bc8029f6f258cc0e58.png

注意,我们不能在这里进行数值优化。我们可以考虑使用其他优化方法

logLikelihoodLogitStable = function(vBeta, mX, vY) {
  -sum(vY*(mX %*% vBeta - log(1+exp(mX %*% vBeta) + 
(1-vY)*(-log(1 + exp(mX %*% vBeta)) 

 
optimLogitLBFGS = optimx(beta_init, logLikelihoodLogitStable,

最优点

b8cb4eb6b8cb10b85269ec770b376fdd.png

结果不理想。

我们使用的技术基于以下思想,

 1c98f789797765e5021da1fd3de77765.png

问题是我的计算机不知道一阶和二阶导数。

可以使用这种计算的函数

logit = function(x){1/(1+exp(-x))}

   for(i in 1:num_iter){
    grad = (t(X)%*%(logit(X%*%beta) - y)) 
    beta = beta - ginv(H)%*%grad
    LL[i] = logLik(beta, X, y)

以我们的OLS起点,我们获得

d6865850581b1920562830f5c8d85bcd.png

如果我们尝试另一个起点

2918e42ee9cbfdacc66bb5e80c42530b.png

一些系数非常接近。然后我们尝试其他方法。

牛顿(或费舍尔)算法

在计量经济学教科书里,您可以看到:

 6940089c52352aa965d709189a26afd2.png

 33159cdabcc8e5c7b63566fc8cc55280.png

beta=as.matrix(lm(Y~0+X)$coefficients
 for(s in 1:9){
   pi=exp(X%*%beta[,s])/(1+exp(X%*%beta[,s]))
   gradient=t(X)%*%(Y-pi)
   omega=matrix(0,nrow(X),nrow(X));diag(omega)=(pi*(1-pi))

在这里观察到,我仅使用该算法的十次迭代。

163c061fd610ee4dea706e6dfaab1413.png

事实是,收敛似乎非常快。而且它相当鲁棒,看看我们改变起点会得到什么

beta=as.matrix(lm(Y~0+X)$coefficients,ncol=1)*runif(8)
 for(s in 1:9){
   pi=exp(X%*%beta[,s])/(1+exp(X%*%beta[,s]))
   gradient=t(X)%*%(Y-pi)
   omega=matrix(0,nrow(X),nrow(X));diag(omega)=(pi*(1-pi))
   Hessian=-t(X)%*%omega%*%X
   beta=cbind(beta,beta[,s]-solve(Hessian)%*%gradient)}
 beta[,8:10]

a586ac73886806674fe996a5f304c292.png

效果提高了,并且可以使用矩阵的逆获得标准偏差。

普通最小二乘

我们更进一步。我们已经看到想要计算类似

 7eb64a33eb5983628a1da8557d3d89e5.png

 但是实际,这是一个标准的最小二乘问题

 924abd16ac24974368fe32c6aa268978.png

这里唯一的问题是权重Δold是未知β的函数。但是实际上,如果我们继续迭代,我们应该能够解决它:给定β,我们得到了权重,并且有了权重,我们可以使用加权的OLS来获取更新的β。这就是迭代最小二乘的想法。

该算法

beta_init = lm(PRONO~.,data=df)$coefficients

for(s in 1:1000){
omega = diag(nrow(df))
diag(omega) = (p*(1-p))

输出在这里

0b5393afdc18875ae5ae4d946a4627e6.png

结果很好,我们在这里也有估计量的标准差

d826a0b5e1f2d8b6d911069a1a379914.png

标准逻辑回归glm函数:

当然,可以使用R内置函数

6c75660d7b5398764ef1c95a592b4454.png

可视化

让我们在第二个数据集上可视化从逻辑回归获得的预测

image(u,u,v ,breaks=(0:10)/10)
points(x,y,pch=19 )
points(x,y,pch=c(1,19)
contour(u,u,v,levels = .5

cea89a62f1b9df5920ccc22458a8f993.png

这里的水平曲线-或等概率-是线性的,因此该空间被一条直线(或更高维的超平面)一分为二(0和1,生存和死亡,白色和黑色)此外,由于我们是线性模型,因此,如果更改截距(为创建两个类别的阈值),我们将获得平行的另一条直线(或超平面)。

接下来,我们将约会样条曲线以平滑那些连续的协变量。

分段线性样条函数

我们从“简单”回归开始(只有一个解释变量),我们可以想到的最简单的模型来扩展我们上面的线性模型, 是考虑一个分段线性函数,它分为两部分。最方便的方法是使用正部函数e8d702c33b0382bac3d0f8b508caae8d.png(如果该差为正,则为x和s之间的差,否则为0)。如

d98041c2b32c6f677304b7045326aeb9.png

是以下连续的分段线性函数,在s处划分。

a12d6cba45489ece0586362df3e8b199.png

对于较小的x值,线性增加,斜率β1;对于较大的x值,线性减少。因此,β2被解释为斜率的变化。

当然,可以考虑多个结。获得正值的函数如下

pos = function(x,s) (x-s)*(x<=s)

然后我们可以在回归模型中直接使用它

回归的输出在这里

Coefficients:
               Estimate Std. Error z value Pr(&gt;|z|)  
(Intercept)     -0.1109     3.2783  -0.034   0.9730  
INSYS           -0.1751     0.2526  -0.693   0.4883  
pos(INSYS, 15)   0.7900     0.3745   2.109   0.0349 *
pos(INSYS, 25)  -0.5797     0.2903  -1.997   0.0458 *

因此,对于很小的值,原始斜率并不重要,但是在15以上时,它会变得明显为正。而在25以上,又发生了重大变化。我们可以对其进行绘图以查看发生了什么

plot(u,v,type="l")
points(INSYS,PRONO)
abline(v=c(5,15,25,55)

598b6db51373a985a1b3323cd4c7c63d.png

使用bs()线性样条曲线

使用GAM模型,情况略有不同。我们将在这里使用所谓的 b样条曲线,

我们可以用边界结点(5,55)和结 {15,25}定义样条函数

B = bs(x,knots=c(15,25),Boundary.knots=c(5,55),degre=1)
matplot(x,B,type="l",lty=1,lwd=2,col=clr6)

dad7ae1e25431c21e8362c95bdc2edaa.png

如我们所见,此处定义的函数与之前的函数不同,但是在每个段(5,15)(15,25)和(25,55)。但是这些函数(两组函数)的线性组合将生成相同的空间。换个角度说,对输出的解释会不同,预测应该是一样的。

Coefficients:
              Estimate Std. Error z value Pr(&gt;|z|)  
(Intercept)    -0.9863     2.0555  -0.480   0.6314  
bs(INSYS,..)1  -1.7507     2.5262  -0.693   0.4883  
bs(INSYS,..)2   4.3989     2.0619   2.133   0.0329 *
bs(INSYS,..)3   5.4572     5.4146   1.008   0.3135

观察到像以前一样存在三个系数,但是这里的解释更加复杂了

0aa7983f2a7c0d963567a566fa77f44f.png

但是,预测结果很好。

分段二次样条

让我们再往前走一步...我们是否也可以具有导数的连续性?考虑抛物线函数,不要对2b73979b4410ba621a1d6d0a74de0b6f.pnga3550dbd5a1d08b0afe01927c0c04a7c.png进行分解,考虑对171921df7fbb1b763b6db6d0f35125fa.png8d2ad3bd674650495aa76b32f1336674.png进行分解。

Coefficients:
                Estimate Std. Error z value Pr(&gt;|z|)  
(Intercept)      29.9842    15.2368   1.968   0.0491 *
poly(INSYS, 2)1 408.7851   202.4194   2.019   0.0434 *
poly(INSYS, 2)2 199.1628   101.5892   1.960   0.0499 *
pos2(INSYS, 15)  -0.2281     0.1264  -1.805   0.0712 .
pos2(INSYS, 25)   0.0439     0.0805   0.545   0.5855

不出所料,这里有五个系数:截距和抛物线函数的三个参数,然后是中间两个附加项–此处(15,25)–以及右侧的部分。当然,对于每个部分,只有一个自由度,因为我们有一个抛物线函数(三个系数),但是有两个约束(连续性和一阶导数的连续性)。

在图上,我们得到以下内容

cec563a0c4390a22dd5c4f43a8286111.png

使用bs()二次样条

当然,我们可以使用R函数执行相同的操作。但是和以前一样,这里的函数有所不同

matplot(x,B,type="l",col=clr6)

6762f01228bf9aa264a41c2c9d0743c8.png

如果我们运行R代码,得到

glm(y~bs(INSYS knots=c(15,25),
Boundary.knots=c(5,55),degre=2) 
 
Coefficients:
               Estimate Std. Error z value Pr(&gt;|z|)  
(Intercept)       7.186      5.261   1.366   0.1720  
bs(INSYS, ..)1  -14.656      7.923  -1.850   0.0643 .
bs(INSYS, ..)2   -5.692      4.638  -1.227   0.2198  
bs(INSYS, ..)3   -2.454      8.780  -0.279   0.7799  
bs(INSYS, ..)4    6.429     41.675   0.154   0.8774

预测是完全相同的

plot(u,v,ylim=0:1,type="l",col="red")

58a1354aed4f11448f02c4b52df1da34.png

三次样条

我们可以使用三次样条曲线。我们将考虑对2b8eb6ea7d5c5247bc5a122e5346a040.png进行分解,得到时间连续性,以及前两个导数的连续性。如果我们使用bs函数,则如下

matplot(x,B,type="l",lwd=2,col=clr6,lty=1
abline(v=c(5,15,25,55),lty=2)

689dfa327633b834470f992ada6073e2.png

现在的预测将是

bs(x,knots=c(15,25),
Boundary.knots=c(5,55),degre=3

60cab2ffdee776f7279a2eb63677a1db.png

结的位置

在许多应用程序中,我们不想指定结的位置。我们只想说(三个)中间结。可以使用

bs(x,degree=1,df=4)

可以查看

bs(x, degree = 1L, knots = c(15.8, 21.4, 27.15), 
Boundary.knots = c(8.7, 54), intercept = FALSE)

它为我们提供了边界结的位置(样本中的最小值和最大值),也为我们提供了三个中间结。观察到实际上,这五个值只是(经验)分位数

quantile( ,(0:4)/4)
   0%   25%   50%   75%  100% 
 8.70 15.80 21.40 27.15 54.00

如果我们绘制预测,我们得到

plot(u,v,ylim=0:1,type="l",col="red",lwd=2)

59b1ec37aadd87f176598f6f45f1b2d6.png

如果我们回到logit变换之前的计算,我们清楚地看到断点是不同的分位数 

plot(x,y,type="l",col="red",lwd=2)
abline(v=quantile(my ,(0:4)/4),lty=2)

21553797ea111656cd545761462e7b69.png

如果我们没有指定,则不会得到任何结…

bs(x, degree = 2L, knots = numeric(0), 
Boundary.knots = c(8.7,54), intercept = FALSE)

如果我们看一下预测 

predict(reg,newdata=data.frame(u),type="response")

实际上,这和二次多项式回归是一样的(如预期的那样)

d85597f280ea1d3bbb0de6f102180cdc.png

相加模型 

现在考虑第二个数据集,包含两个变量。这里考虑一个模型

e9ebda7e9f49cbef4f9370d479daa7f6.png

1c9af622937f41a6368666c447abb4d8.png

81d1b94887b5e7e6cc1a9b7ae1041d59.png

然后我们用glm函数来实现相加模型的思想。

glm(y~bs(x1,degree=1,df=3)+bs(x2,degree=1,df=3), family=binomial(link =  
v = outer(u,u,p)
image(u,u,v, ",col=clr10,breaks=(0:10)/10)

现在,我们能够得到一个“完美”的模型,所以,结果似乎不再连续

abff53138a972ce2aca4f59f5d979ed7.png

persp(u,u,v,theta=20,phi=40,col="green"

8e35adf7e9bb9ea1bf2429d40721e7da.png

当然,它是分段线性的,有超平面,有些几乎是垂直的。
我们也可以考虑分段二次函数  

contour(u,u,v,levels = .5,add=TRUE)

1bca907d9c069428a9a2cc6f31dd27eb.png

有趣的是,我们现在有两个“完美”的模型,白点和黑点的区域不同。 

在R中,可以使用mgcv包来运行gam回归。它用于广义相加模型,但这里只有一个变量,所以实际上很难看到“可加”部分,可以参考其他GAM文章。


8ef0b4f30dd6c8d0a72a79f42a75f0be.png

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类》。

001439d11c2d008e66571fa8bc29ec80.jpeg

3402e1ae59dbe40395c82f4fbf0e3813.png

点击标题查阅往期内容

R语言Gibbs抽样的贝叶斯简单线‍性回归仿真分析

R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例

R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数

R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病

R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据

R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归

Python贝叶斯回归分析住房负担能力数据集

R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析

Python用PyMC3实现贝叶斯线性回归模型

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

R语言Gibbs抽样的贝叶斯简单线性回归仿真分析

R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言贝叶斯线性回归和多元线性回归构建工资预测模型

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言stan进行基于贝叶斯推断的回归模型

R语言中RStan贝叶斯层次模型分析示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较

R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型

R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

f4c813e57d9ebf7e5af2fb8d0f952ee7.png

dc35e9dee94497a4623f2ebd3625d59b.jpeg

041b43e9887ad5135fc833852910d2bb.png

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

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

相关文章

如何在Python中实现高效的数据处理与分析

在当今信息爆炸的时代&#xff0c;我们面对的数据量越来越大&#xff0c;如何高效地处理和分析数据成为了一种迫切的需求。Python作为一种强大的编程语言&#xff0c;提供了丰富的数据处理和分析库&#xff0c;帮助我们轻松应对这个挑战。本文将为您介绍如何在Python中实现高效…

【深度学习实验】卷积神经网络(二):自定义简单的二维卷积神经网络

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 二维互相关运算&#xff08;corr2d&#xff09; 2. 二维卷积层类&#xff08;Conv2D&#xff09; a. __init__&#xff08;初始化&#xff09; b. forward(前向传…

Vue2 常用用法

Vue2 常用用法 Vue 动画1. 进入、离开的过渡2. 列表的过渡3. 状态的过渡 Vue 透传Attrbute、插槽1.透传Attrbute2. 插槽 CSS布局原则flex 布局常见的问题&#xff1a;当子元素内容超出父元素时&#xff0c;不出现滚动条的问题。父元素flex:1且内容超出后的最佳解决方案&#xf…

新版首途影视视频网站源码/22套带后台版全开源+无加密源码(全新二开完整版)

源码简介&#xff1a; 首途影视是一个非常受欢迎的视频网站&#xff0c;提供各种电影、电视剧、综艺节目等内容。它是一个基于Web的视频流媒体平台&#xff0c;你可以随时随地在手机上或电脑上在线观看自己喜欢的影视作品。 新版首途影视视频网站源码/22套带后台版全开源无加…

U盘恢复怎么做?4个方法,拯救你的u盘数据!

“我的u盘对我来说意义重大&#xff0c;里面保存着很重要的照片和视频。但是不知道是不是太久没使用&#xff0c;现在将u盘插入电脑后&#xff0c;有些数据好像丢失了&#xff0c;完全没办法查看了。怎么解决呢&#xff1f;” 随着u盘的广泛使用&#xff0c;数据丢失问题也更为…

7.16 SpringBoot项目实战 【学生入驻】(下):正确理解 编程式事务和声明式事务

文章目录 前言一、service层1. 提交学生信息2. 申请借阅资格3. 重新提交4. 事务 二、web层 StudentController三、测试最后 前言 通过上文&#xff0c;我们实现了【学生入驻】的第一个API&#xff1a;查询学生信息&#xff0c;接下来的流程通常如下图&#xff1a;如果学生未入…

Python第二次作业(2)【控制台界面】

要求&#xff1a;使用Python输出五个控制台界面 第一张&#xff1a; 代码如下&#xff1a; print(" 英雄联盟商城登录界面 ") print("~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*") print(" 1.用户登录 &q…

STL常用遍历、查找算法

目录 算法概述 常用遍历算法for_each 常用遍历算法transform 常用查找算法find 常用查找算法find_if 常用查找算法adjacent_find 常用查找算法binary_search 常用查找算法count 常用查找算法count_if 算法概述 算法主要是由头文件<algorithm><functional>…

Linux系统编程-文件

目录 1、系统编程介绍以及文件基本操作文件编程系统调用文件基本读写练习 2、文件描述符以及大文件拷贝文件描述符大文件拷贝对比试验 3、文件实战练习 1、系统编程介绍以及文件基本操作 系统编程是基于Linux封装好的一些函数&#xff0c;进行开发。 Linux文件信息属性在indo…

面试题:集群高并发环境下如何保证分布式唯一全局ID生成?

文章目录 前言问题为什么需要分布式全局唯一ID以及分布式ID的业务需求ID生成规则部分硬性要求ID号生成系统的可用性要求 一般通用解决方案UUID数据库自增主键 集群分布式集群基于Redis生成全局ID策略单机版集群分布式 雪花算法什么是雪花算法结构实现SpringBoot整合雪花算法 前…

【Pm4py第七讲】关于visualization

本节用于介绍pm4py中的可视化函数&#xff0c;包括可视化bpmn、petri、性能图谱、变迁系统等。 1.函数概述 本次主要介绍Pm4py中一些常见的可视化函数&#xff0c;总览如下表&#xff1a; 函数名说明view_alignments(log, aligned_traces[, format])可视化对齐方法 view_bpmn(…

QT之QML开发 行列布局,流布局,网格布局

本节将演示一下QML布局之行列布局&#xff0c;流布局和网格布局 目录 1.行列布局 1.1一列多行 1.2 一行多列 2.流布局 2.1 从左向右&#xff08;默认&#xff09; ​编辑 2.2 从上往下 3.网格布局 1.行列布局 1.1一列多行 // 行列布局 import QtQuick 2.15 import Qt…

前端架构师进阶之路07_JavaScript函数

1 函数的定义与调用 1.1 初识函数 函数是用于封装一段完成特定功能的代码。 相当于将一条或多条语句组成的代码块包裹起来&#xff0c;在使用时只需关心参数和返回值&#xff0c;就能完成特定的功能&#xff0c;而不用了解具体的实现。 // 内置函数 console.log(parseFloat…

基于R语言、MATLAB、Python机器学习方法与案例分析

目录 基于R语言机器学习方法与案例分析 基于MATLAB机器学习、深度学习在图像处理中的实践技术应用 全套Python机器学习核心技术与案例分析实践应用 基于R语言机器学习方法与案例分析 机器学习已经成为继理论、实验和数值计算之后的科研“第四范式”&#xff0c;是发现新规律&…

iOS技术之app审核信息填写联系人信息提交失败

在AppStore Connect中填写联系人信息中联系方式的电话号码时,输入11位手机号,一直提示 此栏无效: 报错一直说明次栏无效, 开始以为手机号不兼容, 换了好多手机号,座机号都不行, 最终尝试正确的输入格式是:86-xxxxxxxxxxx, 前面有""号, 连接用"-"

关于Modbus消息帧,这些内容你都了解吗?

在 Modbus网络通信的两种传输模式中&#xff08; ASCII或RTU&#xff09;&#xff0c;传输设备以将Modbus消息转为有起点和终点的帧&#xff0c;这就允许接收的设备在消息起始处开始工作&#xff0c;读地址分配信息&#xff0c;判断哪一个设备被选中&#xff08;广播方式则传给…

EfficientFormer:高效低延迟的Vision Transformers

我们都知道Transformers相对于CNN的架构效率并不高&#xff0c;这导致在一些边缘设备进行推理时延迟会很高&#xff0c;所以这次介绍的论文EfficientFormer号称在准确率不降低的同时可以达到MobileNet的推理速度。 Transformers能否在获得高性能的同时&#xff0c;跑得和Mobile…

华为云云耀云服务器 L 实例评测:快速建站的新选择,初创企业和开发者的理想之选

华为云云耀云服务器 L 实例评测&#xff1a;快速建站的新选择&#xff0c;初创企业和开发者的理想之选 文章目录 华为云云耀云服务器 L 实例评测&#xff1a;快速建站的新选择&#xff0c;初创企业和开发者的理想之选导语&#xff1a;摘要&#xff1a; 正文产品概述部署简易性步…

TG Pro for Mac强大的硬件温度检测、风扇控制工具测评

无论您是旧机型还是全新MacBookPro&#xff0c;使用TG Pro均可延长Mac的使用寿命。小编就给大家详细说一下使用TG Pro的体验~ 打开TG Pro&#xff0c;您会注意到的第一件事是带有大量温度&#xff0c;风扇速度和诊断信息的主窗口。 这是您将与之交互的应用程序的主要区域之一。…

[动物文学]走红年轻人化身“精神动物”,这届年轻人不想做人了

数据洞察流行趋势&#xff0c;敏锐把握流量风口。本期千瓜与您分享近期小红书八大热点内容&#xff0c;带您看热点、追热门、借热势&#xff0c;为您提供小红书营销布局风向标。 「动物文学」走红 年轻人化身“精神动物” 其实&#xff0c;这届年轻人“不想做人”很久了………