k我正在尝试根据使用的轮廓分数找到正确的簇数sklearn.cluster.MiniBatchKMeans。
from sklearn.cluster import MiniBatchKMeans
from sklearn.feature_extraction.text import HashingVectorizer
docs = ['hello monkey goodbye thank you', 'goodbye thank you hello', 'i am going home goodbye thanks', 'thank you very much sir', 'good golly i am going home finally']
vectorizer = HashingVectorizer()
X = vectorizer.fit_transform(docs)
for k in range(5):
model = MiniBatchKMeans(n_clusters = k)
model.fit(X)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Warning (from warnings module):
File "C:\Python34\lib\site-packages\sklearn\cluster\k_means_.py", line 1279
0, n_samples - 1, init_size)
DeprecationWarning: This function is deprecated. Please call randint(0, 4 …Run Code Online (Sandbox Code Playgroud) 为什么会这样:
1 === 1;// true
0 === -0;// true
1/0 === 1/-0;// false
Run Code Online (Sandbox Code Playgroud)
原因:
1/0=Infinite;
1/-0=-Infinite;
Run Code Online (Sandbox Code Playgroud)
问题:
为什么 1/0 或 1/-0 不是Undefined或NaN?
它不可能是 Infinity 或 -Infinity,因为 0 等于 -0,所以 1/0 等于 1/-0 我应该说,但为什么不是呢?以及为什么它不是“未定义”(我的计算器所说的)或“NaN”。
为什么在 Python 中会发生这种情况?
\nfloat('inf') == float('inf')返回True,float('inf') + float('inf') == float('inf')返回True,float('inf') * float('inf') == float('inf')返回True,float('inf') - float('inf') == float('inf')返回False,float('inf') / float('inf') == float('inf')返回False。如果我考虑限制,我最好的猜测与此操作的结果有关:
\nlim x\xe2\x86\x92+\xe2\x88\x9e (f(x) \xe2\x96\xa2 g(x)) 其中 lim x\xe2\x86\x92+\xe2\x88\x9e f(x) = +\xe2\x88\x9e 和 lim x\xe2\x86\x92+\xe2\x88\x9e g(x) = +\xe2\x88\x9e,如果 \xe2\x96\ 则返回 +\xe2\x88\x9e xa2 是 + 或 *,但如果 \xe2\x96\xa2 是 - 或 …
我有一个特殊的用例,其中一些边的权double重最初设置为std::numeric_limits<double>::infinity()。这些权重将在稍后的程序执行中设置为其他值。
现在我们已经了解了背景,这是主要问题。我需要将这些边权重与我计算的某些权重的平方进行比较,并且为了考虑计算的权重的平方,我还必须对边权重进行平方。当然,这将导致初始无穷大乘以无穷大。我想知道将双精度集乘以std::numeric_limits<double>::infinity()自身是否是定义的行为。我可以期望它保持不变吗?
即使在 cppreference 上我也找不到任何文档。
我想在我的程序中用 C++ 表达浮点无穷大。我遇到了两种方法来实现这一目标:使用INFINITY和std::numeric_limits<float>::infinity()。
两种选择似乎都有效,但我不确定哪一种是更好的选择。一方面,INFINITYmath.h 中定义了一个简单的宏,使其易于使用。另一方面,std::numeric_limits<float>::infinity()是来自 C++ STL 的函数<limits>,并且是 C++ STL 的一部分,这似乎是一种常规方式。
我应该在 C++ 程序中使用INFINITYorstd::numeric_limits<float>::infinity()来表示浮点无穷大吗?哪一种被认为是更好的做法,是否有我应该注意的性能或可移植性注意事项?
double d=1/0.0;
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)
它打印Infinity,但如果我们将编写double d=1/0;并打印它,我们将得到这个例外:Exception
in thread "main" java.lang.ArithmeticException: / by zero
at D.main(D.java:3)为什么Java在一种情况下知道潜水为零是无穷大但是对于int 0它没有定义?在这两种情况下,d都是双倍的,在两种情况下,结果都是无穷大.
数学中有七种不确定的形式.他们中的大多数在JavaScript中返回NaN.但当我尝试:
Math.pow( 0, 0 )
Run Code Online (Sandbox Code Playgroud)
要么
Math.pow( Infinity, 0 )
Run Code Online (Sandbox Code Playgroud)
它返回:
1
Run Code Online (Sandbox Code Playgroud)
这是某种错误吗?
我读了gem rom的代码,特别是由已知优秀的ruby开发人员编写的子模块rom-relation.在rom-relation/lib/rom-relation.rb,我们可以阅读:
#Represent a positive, infinitely large Float number
Infinity = 1.0 / 0
Run Code Online (Sandbox Code Playgroud)
但我没有看到任何使用Float::INFINITY.
在irb中,我试过:
> 1.0/0 == Float::INFINITY
=> true
Run Code Online (Sandbox Code Playgroud)
Float::INFINITY?Infinity以大写开头,这是一个常数,但为什么不INFINITY呢?(即,这里使用什么惯例?)简单的问题:以下代码是否可用于查找双精度数组中的最小值(假设至少存在一个值):
double[] values = ...
double currentMin = Double.POSITIVE_INFINITY;
for(int i = 0; i < values.length; i++) {
if(values[i] < currentMin) {
currentMin = values[i];
}
}
return currentMin;
Run Code Online (Sandbox Code Playgroud)
问题的关键在于POSITIVE_INFINITY与其他(实际)双重值以及潜在的无限性本身相比是否会表现得如预期.
我知道有这个问题,但'\u221e'对我不起作用.这也是Android特有的.当然必须有一种方法来显示无限的标志!
infinity ×10
java ×3
c++ ×2
double ×2
javascript ×2
math ×2
python ×2
stl ×2
android ×1
conventions ×1
formatting ×1
min ×1
minimum ×1
ruby ×1
scikit-learn ×1
std ×1
types ×1