Пример #1
0
        /// <summary>
        /// Handle BuildModel event from View
        /// </summary>
        /// <returns> Result View showing F1Score and Accuracy </returns>
        public async Task <ActionResult> TrainModel()
        {
            // Read data from CSV file
            IDataView data = MLHelpers.ReadFromCsv();

            data = AppContext.MlContext.Data.Cache(data);

            // Pre-processing data before training
            IDataView cleanData = MLHelpers.PrepareData(data);

            // use FastTree Model
            var modelEstimator = AppContext.MlContext.BinaryClassification.Trainers.FastTree();

            // cross-validation
            var cvResults = AppContext.MlContext.BinaryClassification.CrossValidateNonCalibrated(cleanData, modelEstimator, numberOfFolds: 4);

            // get the best model from 4 fold models
            double[] f1Score = cvResults
                               .OrderByDescending(fold => fold.Metrics.F1Score)
                               .Select(fold => fold.Metrics.F1Score)
                               .ToArray();

            double[] accuracy = cvResults
                                .OrderByDescending(fold => fold.Metrics.Accuracy)
                                .Select(fold => fold.Metrics.Accuracy)
                                .ToArray();

            ITransformer[] models = cvResults
                                    .OrderByDescending(fold => fold.Metrics.Accuracy)
                                    .Select(fold => fold.Model)
                                    .ToArray();

            BinaryClassificationMetrics[] metrics = cvResults
                                                    .OrderByDescending(fold => fold.Metrics.Accuracy)
                                                    .Select(fold => fold.Metrics)
                                                    .ToArray();

            // Get Top Model
            ITransformer topModel = models[0];

            MLResultViewModel resultView = new MLResultViewModel
            {
                accuracy = f1Score[0],
                f1score  = accuracy[0]
            };

            return(View("Result", resultView));
        }
Пример #2
0
        /// <summary>
        /// Handle Get More Data event in View
        /// </summary>
        /// <returns> Index View </returns>
        public async Task <ActionResult> GetData()
        {
            // execute async task with callback to avoid blocking the web app
            _ = FhirService.GetData().ContinueWith((data) =>
            {
                // Write fetched data to csv file
                MLHelpers.WriteToCsv(data.Result);

                // Save new fetched data to AppContext
                foreach (Patient p in data.Result)
                {
                    AppContext.AnalysisData.AddPatient(p);
                }
            });

            return(View("Index"));
        }
Пример #3
0
        public CollapsingView(Context context, IAttributeSet attrs = null, int defStyleAttr = 0) : base(context, attrs, defStyleAttr)
        {
            if (expandDrawable == null)
            {
                expandDrawable   = GetDrawable(Resource.Drawable.ic_expand_more_black_24dp);
                collapseDrawable = GetDrawable(Resource.Drawable.ic_expand_less_black_24dp);
            }
            var titleView = context.GetSystemService <LayoutInflater>(Context.LayoutInflaterService).Inflate(Resource.Layout.collapse_header, this);

            titleTextView = titleView.FindViewById <TextView>(Resource.Id.text);
            iconView      = titleView.FindViewById <ImageView>(Resource.Id.icon);
            iconView.SetImageDrawable(expandDrawable);
            titleView.Click += delegate { Toggle(); };
            Orientation      = Orientation.Vertical;
            ChildViewAdded  += (sender, args) => args.Child.Visibility = isExpanded ? ViewStates.Visible : ViewStates.Gone;
            var padding = MLHelpers.DpToPixelsInt(5);

            SetPadding(padding, padding, padding, padding);
        }
Пример #4
0
        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            var  inflater = activity.LayoutInflater;
            View view;

            switch (viewType)
            {
            case 0:
                view = inflater.Inflate(Android.Resource.Layout.SimpleListItem1, parent, false);
                var text = view.FindViewById <TextView>(Android.Resource.Id.Text1);
                text.SetTextAppearance(activity, Android.Resource.Attribute.TextAppearanceLarge);
                var value = new TypedValue();
                activity.Theme.ResolveAttribute(Resource.Attribute.colorAccent, value, true);
                text.SetTextColor(new Color(value.Data));
                return(new ViewHolder(view));

            default:
                view = inflater.Inflate(Android.Resource.Layout.SimpleListItem2, parent, false);
                view.FindViewById <TextView>(Android.Resource.Id.Text2).SetTextAppearance(activity, Android.Resource.Attribute.TextAppearanceMedium);
                view.SetPaddingRelative(MLHelpers.DpToPixelsInt(20), view.PaddingTop, view.PaddingEnd, view.PaddingBottom);
                return(new ViewHolder(view));
            }
        }
            private async Task <bool> AddProfile(SpannableStringBuilder builder, TagNode node, IDictionary <int, Bitmap> inlines, LinearLayout parent, GravityFlags gravity)
            {
                if (!layoutTags.Contains(node.Tag.Name))
                {
                    return(false);
                }
                AddTextView(builder, parent, gravity);
                var          parameter = node.AttributeValues.Count > 0 ? node.AttributeValues.Values.First() : null;
                LinearLayout newParent;

                switch (node.Tag.Name)
                {
                case "collapse":
                    newParent = new CollapsingView(Activity)
                    {
                        LayoutParameters = defaultLayoutParams, Title = parameter
                    };
                    break;

                case "indent":
                    newParent = new LinearLayout(Activity)
                    {
                        LayoutParameters = defaultLayoutParams, Orientation = Orientation.Vertical
                    };
                    newParent.SetPaddingRelative(MLHelpers.DpToPixelsInt(10), 0, 0, 0);
                    break;

                case "left":
                case "center":
                case "right":
                    newParent = new LinearLayout(Activity)
                    {
                        LayoutParameters = defaultLayoutParams, Orientation = Orientation.Vertical
                    };
                    gravity = node.Tag.Name == "center" ? GravityFlags.Center : node.Tag.Name == "right" ? GravityFlags.End : GravityFlags.Start;
                    newParent.SetHorizontalGravity(gravity);
                    break;

                case "hr":
                    var value = new TypedValue();
                    Activity.Theme.ResolveAttribute(Resource.Attribute.colorAccent, value, true);
                    var hr = new View(Activity)
                    {
                        LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, MLHelpers.DpToPixelsInt(2))
                    };
                    hr.SetBackgroundColor(new Color(value.Data));
                    parent.AddView(hr);
                    return(true);

                case "heading":
                    var heading = new TextView(Activity)
                    {
                        LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent)
                        {
                            BottomMargin = MLHelpers.DpToPixelsInt(5)
                        },
                        Text = node.ToText()
                    };
                    heading.SetTextSize(ComplexUnitType.Sp, 22);
                    parent.AddView(heading);
                    return(true);

                case "img":
                    var image = new ImageView(Activity)
                    {
                        LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent)
                    };
                    image.SetImageBitmap(inlines[int.Parse(parameter)]);
                    parent.AddView(image);
                    return(true);

                case "quote":
                    newParent = new LinearLayout(Activity)
                    {
                        LayoutParameters = defaultLayoutParams, Orientation = Orientation.Vertical
                    };
                    var padding = MLHelpers.DpToPixelsInt(5);
                    newParent.SetPadding(padding, padding, padding, padding);
                    newParent.SetBackgroundResource(Resource.Drawable.background_quote);
                    var text = new TextView(Activity)
                    {
                        LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent)
                        {
                            BottomMargin = MLHelpers.DpToPixelsInt(5)
                        },
                        Text = Strings.Profile_Quote
                    };
                    text.SetTypeface(null, TypefaceStyle.Bold);
                    newParent.AddView(text);
                    return(true);

                default:
                    return(false);
                }
                parent.AddView(newParent);
                var remaining = await BBCodeBinding.GetFormatted(node, (n, b) => AddProfile(b, n, inlines, newParent, gravity));

                AddTextView(remaining, newParent, gravity);
                return(true);
            }
Пример #6
0
        private static async Task <bool> ApplyCustomHandlers(SpannableStringBuilder builder, TagNode node, Func <TagNode, SpannableStringBuilder, Task <bool> > customHandler)
        {
            if (customHandler != null && await customHandler(node, builder))
            {
                return(true);
            }
            var start     = builder.Length();
            var parameter = node.AttributeValues.Count > 0 ? node.AttributeValues.Values.First() : null;

            switch (node.Tag.Name)
            {
            case "session":
                builder.Append(" " + parameter);
                builder.SetSpan(new ImageSpan(sessionIcon.Value), start, start + 1, SpanTypes.MarkMark);
                builder.SetSpan(new ClickableSpan(view => {
                    var channel        = parameter;
                    var channelManager = Mvx.GetSingleton <IChannelManager>();
                    if (channelManager.JoinedChannels.ContainsKey(channel))
                    {
                        ViewChannel(channel);
                        return;
                    }
                    NotifyCollectionChangedEventHandler listener = null;
                    listener = (sender, args) => {
                        if (args.Action != NotifyCollectionChangedAction.Add || args.NewItems.Cast <Channel>().All(x => x.Name != channel))
                        {
                            return;
                        }
                        ViewChannel(channel);
                        channelManager.JoinedChannels.CollectionChanged -= listener;
                    };
                    channelManager.JoinedChannels.CollectionChanged += listener;
                    channelManager.JoinChannel(channel);
                }), start + 1, builder.Length(), 0);
                return(true);

            case "icon":
            case "eicon":
                builder.Append(' ');
                var icon  = node.Tag.Name == "icon" ? Helpers.GetAvatar(node.ToText()) : $"https://static.f-list.net/images/eicon/{node.ToText()}.gif";
                var image = new BitmapDrawable(await Mvx.GetSingleton <IMvxImageCache <Bitmap> >().RequestImage(icon));
                var size  = MLHelpers.DpToPixelsInt(40);
                image.SetBounds(0, 0, size, size);
                builder.SetSpan(new ImageSpan(image), start, start + 1, 0);
                return(true);

            case "user":
                var name = node.ToText();
                builder.Append(" " + name);
                var character = Mvx.GetSingleton <ICharacterManager>().GetCharacter(name);
                builder.SetSpan(new ImageSpan(StatusIconConverter.GetDrawable(character.Status)), start, start + 1, SpanTypes.MarkMark);
                builder.SetSpan(new PureClickableSpan(view => {
                    Mvx.GetSingleton <IViewModelNavigator>().Show <CharacterViewModel, string>(character.Name);
                }), start, builder.Length(), 0);
                builder.SetSpan(new ForegroundColorSpan(new Color(CharacterViewModel.GetColor(character).ARGB)), start + 1, builder.Length(), 0);
                if (character.IsBookmarked || character.IsFriend)
                {
                    builder.SetSpan(new ColoredUnderlineSpan(unchecked ((int)0xff00cc00)), start + 1, builder.Length(), 0);
                }
                return(true);

            default:
                return(false);
            }
        }