让我们考虑一下数据:
import numpy as np
from sklearn.linear_model import LogisticRegression
x=np.linspace(0,2*np.pi,80)
x = x.reshape(-1,1)
y = np.sin(x)+np.random.normal(0,0.4,80)
y[y<1/2] = 0
y[y>1/2] = 1
clf=LogisticRegression(solver="saga", max_iter = 1000)
Run Code Online (Sandbox Code Playgroud)
我想拟合逻辑回归,其中 y 是因变量,x 是自变量。但是当我使用时:
clf.fit(x,y)
Run Code Online (Sandbox Code Playgroud)
我看到错误
'y should be a 1d array, got an array of shape (80, 80) instead'.
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方式重塑数据
y=y.reshape(-1,1)
Run Code Online (Sandbox Code Playgroud)
但我最终得到了长度为 6400 的数组!(怎么会?)
你能帮我执行这个回归吗?
让我们考虑一个非常简单的 kable 表作为可重现的示例:
df <- data.frame("X_1" = c(1, 2), "X_2" =c(3,4))
df <- kable(df, format = 'latex')
df
\begin{tabular}{r|r}
\hline
X\_1 & X\_2\\
\hline
1 & 3\\
\hline
2 & 4\\
\hline
\end{tabular}
Run Code Online (Sandbox Code Playgroud)
是否有可能将此文件保存为 .tex 或 .markdown ?我寻找功能save_kable,但似乎它只支持.png,.pdf或.jpeg格式。
让我们获取以下数据:
import numpy as np
from sklearn.datasets import load_breast_cancer
import pandas as pd
from sklearn.decomposition import PCA
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
Run Code Online (Sandbox Code Playgroud)
让我们考虑一下数据
data = load_breast_cancer()
X = data.data
y = data.target
sc = StandardScaler()
Run Code Online (Sandbox Code Playgroud)
我想绘制具有 3 个分量的 PCA 3D 图,但我只能对前两个分量进行绘制。
到目前为止我的工作
scaler=StandardScaler()
scaler.fit(X)
X_scaled=scaler.transform(X)
pca=PCA(n_components=3)
pca.fit(X_scaled)
X_pca=pca.transform(X_scaled)
ex_variance=np.var(X_pca,axis=0)
ex_variance_ratio = ex_variance/np.sum(ex_variance)
ex_variance_ratio
Xax=X_pca[:,0]
Yax=X_pca[:,1]
cdict={0:'red',1:'green'}
labl={0:'Malignant',1:'Benign'}
marker={0:'*',1:'o'}
alpha={0:.3, 1:.5}
fig,ax=plt.subplots(figsize=(7,5))
fig.patch.set_facecolor('white')
for l in np.unique(y):
ix=np.where(y==l)
ax.scatter(Xax[ix],Yax[ix],c=cdict[l],s=40,
label=labl[l],marker=marker[l],alpha=alpha[l])
# for loop ends
plt.xlabel("First Principal Component",fontsize=14)
plt.ylabel("Second …Run Code Online (Sandbox Code Playgroud) 有一件事让我感到奇怪。我读过一些关于单元测试的内容,我读到的所有内容都与 testthat(为单元测试创建的包)密切相关。但是可以肯定的是,R 中有其他方法可以在不使用 testthat 包的情况下进行单元测试。那么为什么它们如此不受欢迎以至于很难找到关于它的文章呢?压倒单元测试市场的 testthat 包的主要优势是什么?
我已阅读http://adv-r.had.co.nz/Exceptions-Debugging.html,我所理解的是我们有三种主要类型的条件(我将其称为错误):
据我了解,错误是非常不合适的事情,它可能对我们的功能非常有害(最严重的错误类型)。但我无法区分警告和消息。我想说的是,一条消息共享有关我们代码中某些可能存在的错误部分的附加信息,但这不会直接影响我们的代码(这意味着我们的代码可以工作,但有一些我们应该注意的附加信息)。
让我们考虑以下 ggplot:
plot_1 <- ggplot() +
aes(x = 1:100, y = 1:100) +
geom_point() +
labs(title = "Title_1") +
theme(plot.title = element_text(hjust = 0.5))
plot_1
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 如何将plot_1from的标题更改Title_1为Title_2?或者当然我可以用 来创建新的图labs(title = "Title_2"),但是如果我有很长的代码,那么仅更改图的标题时就会非常多余。那么 ggplot 中是否有任何方法可以更改绘图的标题,但不能从头开始创建新的标题?
我有我解决的问题,但我认为我的解决方案是在处理更多变量时涉及且无效。我想编写一个结合三个图的函数:
来自标准正态分布的数字
来自标准均匀分布的数字
来自标准指数分布的数字
可以指定样本的长度。同样在输出中,我想要一个名为 plot_types 的额外输入。默认情况下,它会组合所有图形。但是用户也可以准确指定应该包括哪些图。例如,如果plot_types==c('Norm.plot','Unif.plot')R 应该只绘制正态分布和均匀分布中的数字,而忽略指数分布中的数字。
我的工作到目前为止
我写了以下代码:
library(ggplot2)
library(gridExtra)
visual=function(num,plot_types='all'){
Norm.plot <- ggplot()+
geom_line(aes(x=1:num,y=rnorm(num)))+
labs(title='Norm plot',x=NULL,y=NULL)+
theme(plot.title = element_text(hjust = 0.5))
Unif.plot <- ggplot()+
geom_line(aes(x=1:num,y=runif(num)))+
labs(title='Unif plot',x=NULL,y=NULL)+
theme(plot.title = element_text(hjust = 0.5))
Exp.plot <- ggplot()+
geom_line(aes(x=1:num,y=rexp(num)))+
labs(title='Exp plot',x=NULL,y=NULL)+
theme(plot.title = element_text(hjust = 0.5))
if (plot_types=='all'){grid.arrange(Norm.plot,Exp.plot, Unif.plot,ncol=2)}
else if (plot_types==c('Norm.plot','Unif.plot') ||
plot_types==c('Unif.plot','Norm.plot')){grid.arrange(Norm.plot, Unif.plot)}
else if (plot_types==c('Norm.plot','Exp.plot') ||
plot_types==c('Exp.plot','Norm.plot')){grid.arrange(Norm.plot, Exp.plot)}
else if (plot_types==c('Unif.plot','Exp.plot') ||
plot_types==c('Exp.plot','Unif.plot')){grid.arrange(Exp.plot, Unif.plot)}
}
visual(50,plot_types = c('Norm.plot','Unif.plot'))
Run Code Online (Sandbox Code Playgroud)
上面的代码有几个问题。第一个是它有很多循环,所以效率很低。当试图将其扩展到更多变量时,这也将是非常有问题的。
你有什么想法我怎么能省略使用这么多循环?
让我们考虑字符串向量:
string_vector <- c("big & huge", "big & huge & small", "tiny",
"very_small & tremendous")
Run Code Online (Sandbox Code Playgroud)
另一个包含整数的向量:
number <- c(2, 1, 3, 4)
Run Code Online (Sandbox Code Playgroud)
我想通过等于number向量中相应整数的次数来重复 string_vector 的元素。即string_vector[1]重复number[1]次数,string_vector[2]重复number[2]次数等。
我的解决方案
我的解决方案是最直接的:
vec <- c()
for (i in seq_len(length(number))) {
vec <- append(vec, rep(string_vector[i], number[i]))
}
Run Code Online (Sandbox Code Playgroud)
问题
我的问题是我的解决方案有点不方便。我在想是否有可能以某种方式省略循环。我不太确定如何做到这一点。不知道如何通过不使用循环来解决这个问题?