在TSNE(python)中选择random_State参数

时间:2017-12-15 21:26:39

标签: python machine-learning

我有两个问题,我正在尝试使用bh_sne库绘制数据,但由于此算法的性质基于每次运行中的随机数,因此我得到的结果不同。我想在每次运行中得到相同的结果。看来random_state很有帮助。 但我不知道它究竟是什么意思,通过为random_state=0选择不同的整数。

例如random_state=1random_state=42random_state=None ..和AttributeError: 'int' object has no attribute 'randint'

之间的区别是什么?

其次,当我在我的函数中应用此参数并给出除None之外的任何值时,我得到以下错误。

data = bh_sne(X, random_state =1 )

我的pycharm中没有任何名为random的文件。

这是我的代码:

X

/// <summary> /// An unsuccessful HTTP result. /// </summary> public class UnsuccessfulActionResult : IActionResult, IHttpStatusCodeResult, IErrors { /// <inheritdoc /> /// <summary> /// The HTTP status code. /// </summary> public HttpStatusCode StatusCode { get; } /// <summary> /// The corresponding error messages, if any. /// </summary> public IReadOnlyCollection<string> Errors { get; } /// <summary> /// The request Transaction ID. /// </summary> public string TransactionId { get; } /// <summary> /// Default ctor. /// </summary> /// <param name="transactionId">The request Transaction ID.</param> /// <param name="errors">The corresponding error messages, if any.</param> /// <param name="httpStatusCode"></param> public UnsuccessfulActionResult( string transactionId, HttpStatusCode httpStatusCode, IReadOnlyCollection<string> errors = null) { TransactionId = transactionId; StatusCode = httpStatusCode; Errors = errors ?? new List<string>(); } /// <summary> /// Convenient method to create an unsuccessful response model. /// </summary> /// <param name="statusCode"></param> /// <returns></returns> protected UnsuccessfulResponseModel CreateResponseModel(int statusCode) { return new UnsuccessfulResponseModel(TransactionId, statusCode, Errors); } /// <inheritdoc /> public virtual Task ExecuteResultAsync(ActionContext context) { var objectResult = new ObjectResult(CreateResponseModel((int)StatusCode)) { StatusCode = (int)StatusCode }; return objectResult.ExecuteResultAsync(context); } } 包含我的功能值。

1 个答案:

答案 0 :(得分:3)

这个lib使用numpy的随机模块,更具体:this part

就这样使用它:

import numpy as np

bh_sne(X, random_state=np.random.RandomState(0))  # init with integer 0

这可以通过简单的随机源搜索(见下图)看到,这也显示了一些单元测试!

整数(上面的0)只是熵的一些来源,这导致内部随机数发生器的某种状态。如果不分析PRNG,就不能保证0的种子数与1或40相比如何表现。它不需要不同(但通常是)!

只有一个保证:决定论!从用数字seed=my_integer初始化的PRNG中抓取随机数,每次用这个精确种子完成时返回相同的路径/相同的数字(前x个数字每次都相等; x任意)。

但是intro-page可能会给出一个更重要的通知(当我在python中工作时看到你正在使用的lib时,这是我的第一个问题):

注意:Scikit-learn v0.17包含TSNE算法,你应该使用它们而不是它。

enter image description here