相关疑难解决方法(0)

如何查看函数的源代码?

我想查看一个函数的源代码,看看它是如何工作的.我知道我可以通过在提示符下键入其名称来打印函数:

> t
function (x) 
UseMethod("t")
<bytecode: 0x2332948>
<environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,是什么UseMethod("t")意思?我如何找到实际使用的源代码,例如:t(1:10)

有没有当我看到之间的差异UseMethod,当我看到standardGenericshowMethods,与with

> with
standardGeneric for "with" defined from package "base"

function (data, expr, ...) 
standardGeneric("with")
<bytecode: 0x102fb3fc0>
<environment: 0x102fab988>
Methods may be defined for arguments: data
Use  showMethods("with")  for currently available ones.
Run Code Online (Sandbox Code Playgroud)

在其他情况下,我可以看到正在调用R函数,但我找不到这些函数的源代码.

> ts.union
function (..., dframe = FALSE) 
.cbind.ts(list(...), .makeNamesTs(...), dframe = dframe, union = TRUE)
<bytecode: 0x36fbf88>
<environment: namespace:stats>
> .cbindts
Error: object '.cbindts' …
Run Code Online (Sandbox Code Playgroud)

r function r-faq

518
推荐指数
10
解决办法
26万
查看次数

在曲线上找到最佳权衡点

假设我有一些数据,我想在其上安装一个参数化模型.我的目标是为此模型参数找到最佳值.

我正在使用AIC/BIC/MDL类型的标准进行模型选择,这种标准可以奖励低误差的模型,但也会对高复杂度的模型进行惩罚(我们正在寻找对这些数据最简单但最有说服力的解释,可以这么说,奥卡姆的剃刀).

按照上面的说明,这是我得到的三种不同标准的例子(两个要最小化,一个要最大化):

AIC-BIC 适合

在视觉上你可以很容易地看到肘部形状,你会在该区域的某处选择一个参数值.问题是我正在为大量实验做这件事,我需要一种方法来找到这个值而不需要干预.

我的第一个直觉是尝试从角落以45度角绘制一条直线并继续移动它直到它与曲线相交,但这说起来容易做起来:)如果曲线有些偏斜,它也会错过感兴趣的区域.

关于如何实现这个或更好的想法的任何想法?

以下是重现上述一个图表所需的样本:

curve = [8.4663 8.3457 5.4507 5.3275 4.8305 4.7895 4.6889 4.6833 4.6819 4.6542 4.6501 4.6287 4.6162 4.585 4.5535 4.5134 4.474 4.4089 4.3797 4.3494 4.3268 4.3218 4.3206 4.3206 4.3203 4.2975 4.2864 4.2821 4.2544 4.2288 4.2281 4.2265 4.2226 4.2206 4.2146 4.2144 4.2114 4.1923 4.19 4.1894 4.1785 4.178 4.1694 4.1694 4.1694 4.1556 4.1498 4.1498 4.1357 4.1222 4.1222 4.1217 4.1192 4.1178 4.1139 4.1135 4.1125 4.1035 4.1025 4.1023 4.0971 4.0969 4.0915 …
Run Code Online (Sandbox Code Playgroud)

algorithm matlab data-modeling model-fitting

47
推荐指数
6
解决办法
2万
查看次数

自动和数学地计算曲线的"弯头"

曲线的一个示例如下所示.肘部点可能是x = 3或4.如何自动和数学地计算曲线的肘部?

替代文字

math curve

19
推荐指数
2
解决办法
1万
查看次数

分层聚类:确定最佳聚类数并统计描述聚类

我可以对R中的方法使用一些建议来确定最佳簇数,然后用不同的统计标准描述簇.我是R的新手,具有关于聚类分析统计基础的基本知识.

  1. 确定簇数的方法:在文献中,一种常用的方法是所谓的"Elbow-criterion",它比较不同簇解的平方差和(SSD).因此,SSD在分析中针对Cluster的数量绘制,并且通过识别图中的"肘"来确定最佳簇数(例如,这里:https://en.wikipedia.org/wiki/File:DataClustering_ElbowCriterion. JPG)这种方法是获得主观印象的第一种方法.因此,我想在R中实现它.互联网上的信息很少.这里有一个很好的例子:http://www.mattpeeples.net/kmeans.html作者还做了一个有趣的迭代方法,看看在多次重复聚类过程之后肘是否在某种程度上是稳定的(尽管如此,它是用于分区聚类方法而不是分层).文献中的其他方法包括所谓的"停止规则".MILLIGAN&COOPER相比,在他们的论文,这些停止规则30"用于确定数据集簇的数目程序的审查"(可在这里:http://link.springer.com/article/10.1007%2FBF02294245)发现Calinski和Harabasz的停止规则在蒙特卡洛评估中提供了最好的结果.在R中实现这一点的信息甚至更为稀疏.因此,如果有人曾经实施过这个或另一个停止规则(或其他方法),那么一些建议会非常有用.

  2. 统计描述聚类:为了描述聚类,我想使用均值和某种方差标准.我的数据是关于农业用地的数据,并显示每个市的不同作物的产量数量.我的目标是在我的数据集中找到类似的土地利用模式.

我为一个对象子集生成了一个脚本来进行第一次测试运行.它看起来像这样(脚本中的步骤解释,下面的来源).

    #Clusteranalysis agriculture

    #Load data
    agriculture <-read.table ("C:\\Users\\etc...", header=T,sep=";")
    attach(agriculture)

    #Define Dataframe to work with
    df<-data.frame(agriculture)

    #Define a Subset of objects to first test the script
    a<-df[1,]
    b<-df[2,]
    c<-df[3,]
    d<-df[4,]
    e<-df[5,]
    f<-df[6,]
    g<-df[7,]
    h<-df[8,]
    i<-df[9,]
    j<-df[10,]
    k<-df[11,]
    #Bind the objects
    aTOk<-rbind(a,b,c,d,e,f,g,h,i,j,k)

    #Calculate euclidian distances including only the columns 4 to 24
    dist.euklid<-dist(aTOk[,4:24],method="euclidean",diag=TRUE,upper=FALSE, p=2)
    print(dist.euklid)

    #Cluster with Ward
    cluster.ward<-hclust(dist.euklid,method="ward")

    #Plot the dendogramm. define …
Run Code Online (Sandbox Code Playgroud)

r cluster-analysis data-mining

12
推荐指数
2
解决办法
2万
查看次数

使用 Python 在优化曲线上找到“肘点”

我有一个点列表,它们是 kmeans 算法的惯性值。
为了确定最佳集群数量,我需要找到这条曲线开始变平的点。

数据示例

以下是我的值列表的创建和填充方式:

sum_squared_dist = []
K = range(1,50)
for k in K:
    km = KMeans(n_clusters=k, random_state=0)
    km = km.fit(normalized_modeling_data)
    sum_squared_dist.append(km.inertia_)

print(sum_squared_dist)
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到一个点,这条曲线的节距增加(曲线正在下降,所以一阶导数为负)?

我的方法

derivates = []
for i in range(len(sum_squared_dist)):
    derivates.append(sum_squared_dist[i] - sum_squared_dist[i-1])
Run Code Online (Sandbox Code Playgroud)

我想使用肘部方法找到任何给定数据的最佳聚类数。有人可以帮助我如何找到惯性值列表开始变平的点吗?

编辑数据点

[7342.1301373073857, 6881.7109460930769, 6531.1657905495022,  
6356.2255554679778, 6209.8382535595829, 6094.9052166741121, 
5980.0191582610196, 5880.1869867848218, 5779.8957906367368, 
5691.1879324562778, 5617.5153566271356, 5532.2613232619951, 
5467.352265375117, 5395.4493783888756, 5345.3459908298091, 
5290.6769823693812, 5243.5271656371888, 5207.2501206569532, 
5164.9617535255456]
Run Code Online (Sandbox Code Playgroud)

图形: 图形

python numpy scikit-learn data-science

11
推荐指数
1
解决办法
2万
查看次数

在Spark中使用Silhouette Clustering

我想在Spark中使用KMeans群集时使用轮廓来确定k的最佳值.有没有最佳方式并行化这个?即使其可扩展

cluster-analysis machine-learning distributed-computing k-means apache-spark

8
推荐指数
2
解决办法
4086
查看次数

实现弯头方法寻找R中K-Means聚类的最优簇数

我想为我的数据集使用K-Means聚类.我在R中使用kmeans()函数来执行此操作.

 k<-kmeans(data,centers=3)
 plotcluster(m,k$cluster)
Run Code Online (Sandbox Code Playgroud)

但是我不确定这个函数K的正确值是多少.我想尝试使用 弯头方法 .R中是否有任何包使用弯头方法执行聚类以找到最佳簇数.

r k-means

6
推荐指数
2
解决办法
3万
查看次数

使用DBSCAN聚类GPS数据但是聚类没有意义(就大小而言)

我正在处理GPS数据(纬度,经度).对于基于密度的聚类,我在R中使用了DBSCAN.

在我的案例中DBSCAN的优点:

  1. 我不必预定义簇的数量
  2. 我可以计算距离矩阵(使用Haversine距离公式)并将其用作dbscan中的输入

    library(fossil)
    dist<- earth.dist(df, dist=T) #df is dataset containing lat long values
    library(fpc)
    dens<-dbscan(dist,MinPts=25,eps=0.43,method="dist")
    
    Run Code Online (Sandbox Code Playgroud)

现在,当我看到集群时,它们没有意义.有些星团的点数相差超过1公里.我想要密集的群集,但不是那么大.

考虑到不同的值MinPts和eps,并且我还使用k最近邻距离图来获得epsfor MinPts= 25 的最佳值

dbscan正在做的是进入我的数据集中的每个点,如果点p MinPts在其eps邻域中有一个集群,但同时它也加入了密度可达的集群(我猜这对我来说是个问题) .

这真的是一个很大的问题,特别是"如何在不过多影响其信息的情况下减少集群的大小",但我会将其写下来,如下所示:

  1. 如何删除群集中的边界点?我知道哪个群集使用哪个点dens$cluster,但我怎么知道特定点是核心还是边界?
  2. 群集0总是噪音吗?
  3. 我的印象是群集的大小可以与之相媲美eps.但事实并非如此,因为密度可达集群被组合在一起.
  4. 是否有任何其他聚类方法具有优势dbscan 但可以给我更有意义的聚类?

OPTICS 是另一种选择,但它会解决我的问题吗?

Note:有意义的我想说更接近的点应该在一个集群中.但是相距1km或更远的点不应该在同一个簇中.

r cluster-analysis dbscan

5
推荐指数
1
解决办法
6613
查看次数

如何在R中绘制此群集?

我有一堆不同点的x和y坐标以及它所属的集群.如何绘制群集?以下是我正在使用的示例:

x-values    y-values    cluster
3           5           0
2           3           1
1           4           0
8           3           0
2           2           2
7           7           2
Run Code Online (Sandbox Code Playgroud)

如何将点的散点图绘制为"*"或"+"并为群集着色,使其看起来像:

在此输入图像描述

注意我没有进行PCA分析.

r cluster-analysis

5
推荐指数
1
解决办法
2241
查看次数

在R中,是否存在用于创建大致相等大小的簇的算法

似乎有很多关于创建分层或k-means集群的信息.但我想知道在R中是否存在可以创建大小相等的K簇的解决方案.有一些关于在其他语言中这样做的东西,但我无法找到任何在互联网上搜索建议如何在R中实现结果的东西.

一个例子是

set.seed(123)
df <- matrix(rnorm(100*5), nrow=100)
km <- kmeans(df, 10)
print(sapply(1:10, function(n) sum(km$cluster==n)))
Run Code Online (Sandbox Code Playgroud)

结果

[1] 14 12  4 13 16  6  8  7 13  7
Run Code Online (Sandbox Code Playgroud)

我理想的是希望看到

[1] 10 10 10 10 10 10 10 10 10 10 
Run Code Online (Sandbox Code Playgroud)

r cluster-analysis

5
推荐指数
1
解决办法
1197
查看次数